touch.c File Reference

EFM32GG_DK3750, Touch panel driver. More...

#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 <math.h>
#include "calibrate.h"
#include "bsp.h"
#include "i2cdrv.h"
#include "eeprom.h"
Include dependency graph for touch.c:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define ADC_X   adcSingleInpCh1
 Input channel 1.
#define ADC_Y   adcSingleInpCh4
 Input channel 4.
#define TOUCH_X1   gpioPortD, 5
 Port D5.
#define TOUCH_X2   gpioPortD, 4
 Port D4.
#define TOUCH_Y1   gpioPortD, 3
 Port D3.
#define TOUCH_Y2   gpioPortD, 1
 Port D2.

Enumerations

enum  TOUCH_State_TypeDef {
  TOUCH_INIT,
  TOUCH_CHECK_PRESS,
  TOUCH_MEASURE_X,
  TOUCH_MEASURE_Y
}
 

touch driver states

More...

Functions

void TOUCH_RecalculatePosition (volatile TOUCH_Pos_TypeDef *pos)
 Convert ADC readings into XY position.
void TOUCH_CallUpcall (void)
 Function that calls registered upcall.
int TOUCH_StateChanged (void)
 Check if cursor state changed (down or move).
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_IsBusy (void)
 Check status of the touch panel.
void TOUCH_Init (TOUCH_Config_TypeDef *config)
 Initialize touch panel driver.
TOUCH_Pos_TypeDefTOUCH_GetPos (void)
 Returns current touch position and state.
void TOUCH_RegisterUpcall (TOUCH_Upcall_TypeDef *new_upcall)
 Register upcall which will be call every position or state change.
int TOUCH_CalibrationTable (POINT *displayPtr, POINT *screenPtr)
 Set calibration table.

Variables

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

Detailed Description

EFM32GG_DK3750, Touch panel driver.

Version:
3.20.5

License

(C) Copyright 2014 Silicon Labs, http://www.silabs.com

This file is licensensed 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.


Define Documentation

#define ADC_X   adcSingleInpCh1

Input channel 1.

Definition at line 37 of file touch.c.

Referenced by ADC0_IRQHandler().

#define ADC_Y   adcSingleInpCh4

Input channel 4.

Definition at line 38 of file touch.c.

Referenced by ADC0_IRQHandler(), and TOUCH_Init().

#define TOUCH_X1   gpioPortD, 5

Port D5.

Definition at line 41 of file touch.c.

Referenced by ADC0_IRQHandler().

#define TOUCH_X2   gpioPortD, 4

Port D4.

Definition at line 42 of file touch.c.

Referenced by ADC0_IRQHandler(), and TOUCH_IsBusy().

#define TOUCH_Y1   gpioPortD, 3

Port D3.

Definition at line 43 of file touch.c.

Referenced by ADC0_IRQHandler().

#define TOUCH_Y2   gpioPortD, 1

Port D2.

Definition at line 44 of file touch.c.

Referenced by ADC0_IRQHandler().


Enumeration Type Documentation

touch driver states

Definition at line 47 of file touch.c.


Function Documentation

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.

Definition at line 215 of file touch.c.

References ADC_X, ADC_Y, TOUCH_Pos_TypeDef::adcx, TOUCH_Pos_TypeDef::adcy, TOUCH_Pos_TypeDef::pen, TOUCH_CallUpcall(), TOUCH_RecalculatePosition(), TOUCH_StateChanged(), TOUCH_X1, TOUCH_X2, TOUCH_Y1, TOUCH_Y2, TOUCH_Pos_TypeDef::x, and TOUCH_Pos_TypeDef::y.

Here is the call graph for this function:

void TOUCH_CallUpcall ( void   ) 

Function that calls registered upcall.

Definition at line 181 of file touch.c.

Referenced by ADC0_IRQHandler().

Here is the caller graph for this function:

void TOUCH_RecalculatePosition ( volatile TOUCH_Pos_TypeDef pos  ) 

Convert ADC readings into XY position.

Parameters:
[in] pos Pointer to position structure

Definition at line 154 of file touch.c.

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

Referenced by ADC0_IRQHandler().

Here is the caller graph for this function:

int TOUCH_StateChanged ( void   ) 

Check if cursor state changed (down or move).

Returns:
1 if the cursor state has changed

Definition at line 194 of file touch.c.

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

Referenced by ADC0_IRQHandler().

Here is the caller graph for this function:


Variable Documentation

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

Calibration table.

Definition at line 67 of file touch.c.