touch.c File Reference

EFM32GG_DK3750, Touch panel driver.

Version
5.4.0

License

Copyright 2015 Silicon Labs, Inc. http://www.silabs.com

This file is licensed under the Silabs License Agreement. See the file "Silabs_License_Agreement.txt" for details. Before using this software for any purpose, you must agree to the terms of that agreement.

Definition in file touch.c.

#include <stdlib.h>
#include <string.h>
#include "em_device.h"
#include "em_adc.h"
#include "em_gpio.h"
#include "em_cmu.h"
#include "touch.h"
#include "calibrate.h"
#include "bsp.h"
#include "i2cspm.h"
#include "eeprom.h"

Macros

#define ADC_X   adcSingleInpCh1
 
#define ADC_Y   adcSingleInpCh4
 
#define TOUCH_X1_PIN   5
 
#define TOUCH_X1_PORT   gpioPortD
 
#define TOUCH_X2_PIN   4
 
#define TOUCH_X2_PORT   gpioPortD
 
#define TOUCH_Y1_PIN   3
 
#define TOUCH_Y1_PORT   gpioPortD
 
#define TOUCH_Y2_PIN   1
 
#define TOUCH_Y2_PORT   gpioPortD
 

Enumerations

enum  TOUCH_State_TypeDef {
  TOUCH_INIT,
  TOUCH_CHECK_PRESS,
  TOUCH_MEASURE_X,
  TOUCH_MEASURE_Y
}
 

Functions

void ADC0_IRQHandler (void)
 Interrupt handler is executed with frequency ~28Hz when panel is not pressed and with frequency ~140Hz when panel is pressed - this will give ~50 readings per second.
 
int TOUCH_CalibrationTable (POINT *displayPtr, POINT *screenPtr)
 Set calibration table.
 
void TOUCH_CallUpcall (void)
 Function that calls registered upcall.
 
TOUCH_Pos_TypeDefTOUCH_GetPos (void)
 Returns current touch position and state.
 
void TOUCH_Init (TOUCH_Config_TypeDef *config)
 Initialize touch panel driver.
 
int TOUCH_IsBusy (void)
 Check status of the touch panel.
 
void TOUCH_RecalculatePosition (volatile TOUCH_Pos_TypeDef *pos)
 Convert ADC readings into XY position.
 
void TOUCH_RegisterUpcall (TOUCH_Upcall_TypeDef *new_upcall)
 Register upcall which will be call every position or state change.
 
int TOUCH_StateChanged (void)
 Check if cursor state changed (down or move)
 

Variables

MATRIX calibrationMatrix = { 103800, 2048, -8184704, -384, 102144, -16424640, 287650 }
 

Macro Definition Documentation

#define ADC_X   adcSingleInpCh1

Input channel 1

Definition at line 36 of file touch.c.

Referenced by ADC0_IRQHandler().

#define ADC_Y   adcSingleInpCh4

Input channel 4

Definition at line 37 of file touch.c.

Referenced by ADC0_IRQHandler(), and TOUCH_Init().

#define TOUCH_X1_PIN   5

Pin 5

Definition at line 41 of file touch.c.

Referenced by ADC0_IRQHandler().

#define TOUCH_X1_PORT   gpioPortD

Port D

Definition at line 40 of file touch.c.

Referenced by ADC0_IRQHandler().

#define TOUCH_X2_PIN   4

Pin 4

Definition at line 43 of file touch.c.

Referenced by ADC0_IRQHandler(), and TOUCH_IsBusy().

#define TOUCH_X2_PORT   gpioPortD

Port D

Definition at line 42 of file touch.c.

Referenced by ADC0_IRQHandler(), and TOUCH_IsBusy().

#define TOUCH_Y1_PIN   3

Pin 3

Definition at line 45 of file touch.c.

Referenced by ADC0_IRQHandler().

#define TOUCH_Y1_PORT   gpioPortD

Port D

Definition at line 44 of file touch.c.

Referenced by ADC0_IRQHandler().

#define TOUCH_Y2_PIN   1

Pin 1

Definition at line 47 of file touch.c.

Referenced by ADC0_IRQHandler().

#define TOUCH_Y2_PORT   gpioPortD

Port D

Definition at line 46 of file touch.c.

Referenced by ADC0_IRQHandler().

Enumeration Type Documentation

touch driver states

Definition at line 50 of file touch.c.

Function Documentation

void TOUCH_RecalculatePosition ( volatile TOUCH_Pos_TypeDef pos)

Convert ADC readings into XY position.

Parameters
[in]posPointer to position structure

Definition at line 158 of file touch.c.

References TOUCH_Pos_TypeDef::adcx, TOUCH_Pos_TypeDef::adcy, calibrationMatrix, TOUCH_Pos_TypeDef::pen, TOUCH_Pos_TypeDef::x, and TOUCH_Pos_TypeDef::y.

Referenced by ADC0_IRQHandler().

int TOUCH_StateChanged ( void  )

Check if cursor state changed (down or move)

Returns
1 if the cursor state has changed

Definition at line 201 of file touch.c.

References TOUCH_Pos_TypeDef::pen, TOUCH_Pos_TypeDef::x, and TOUCH_Pos_TypeDef::y.

Referenced by ADC0_IRQHandler().

Variable Documentation

MATRIX calibrationMatrix = { 103800, 2048, -8184704, -384, 102144, -16424640, 287650 }

Calibration table

Definition at line 70 of file touch.c.

Referenced by TOUCH_CalibrationTable(), and TOUCH_RecalculatePosition().