AN205225 F²MC-8FX Family MB95F390H Series Capacitance Touch Sensor use Tsc2_Demo_398.Lib.pdf

AN205225
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use
Tsc2_Demo_398.Lib
This application note describes Cypress TSC solution, and describes how to use TSC library and TSC GUI.
Contents
1
2
3
Introduction ..................................................................1
1.1 Purpose...............................................................1
1.2 Document Overview............................................1
Solutions ......................................................................2
2.1 GPIO Solution .....................................................2
2.2 AD Charge Solution ............................................4
Library .........................................................................6
3.1 Library Overview .................................................6
3.2 Parameters Setup ...............................................7
3.3 Application Interface ...........................................9
1
1.1
3.4 Cypress TSC Performance ............................... 12
3.5 How to Add Fujitsu TSC.lib ............................... 13
3.6 How to use Cypress TSC.lib ............................. 16
4 LIB Usage Notice ...................................................... 18
5 Appendix ................................................................... 19
5.1 Sample code ..................................................... 19
6 Additional Information ................................................ 27
Document History............................................................ 28
Introduction
Purpose
This application note describes Cypress TSC solution, and describes how to use TSC library and TSC GUI.
1.2
Document Overview
The rest of document is organized as the following:
Chapter 2 explains the Solutions - working principles of GPIO solution.
Chapter 3 explains Library - how to use TSC library.
Chapter 4 explains LIB Usage Notice.
www.cypress.com
Document No. 002-05225 Rev. *A
1
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
2
Solutions
This chapter introduces working principles of TSC solutions used in TSC2_EVB_418.LIB.
2.1
GPIO Solution
The theory of capacitance touch sensor is to check capacitance increment. As follows, when finger not touch the C =
Cp, when touching the C = Cp +Cғ, and the increment is ΔC = Cғ. This ΔC will affect the electrode charging-up time.
The GPIO method detects the touch action by compare the time difference.
Let t1 is time of electrode charge filled in finger not touch situation. When finger touching the pad, this will be delayed
to t2 (because of ΔC). MCU can detect the touch action by compare this time delay.
Figure 1. GPIO method Physical Diagram
VCC
MCU
GPIO-pin
Figure 2. GPIO method Curve Graph
V
Δt
Finger not touch
Finger touching
t1
www.cypress.com
t2
t
Document No. 002-05225 Rev.*A
2
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
The GPIO method includes the following steps:
1.
Set pin to output ‘L’ to discharge the pad
2.
Set pin to input (high impedance) to charge the pad
3.
Begin counter accumulation
4.
Wait until the pad charge filled
5.
Save counter value
6.
Start next sample
The flowchart shown as below
Figure 3. GPIO method Check Flowchart
Start
Discharge the pad
Charge the pad
Wait timer
interrupt
Y
Save ADC value
www.cypress.com
Document No. 002-05225 Rev.*A
3
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
2.2
AD Charge Solution
The theory of capacitance touch sensor is to check capacitance increment. As follows, when finger not touch the C =
Cp, when touching the C = Cp +Cғ, and the increment is ΔC = Cғ. This ΔC will affect the electrode charging-up time.
The AD charge method detects the touch action by compare the voltage difference at the same time
Let V1 is voltage of electrode at time t in finger not touch situation. When finger touching, speed of electrode charging
will be delayed (because of ΔC). At the same time t, the voltage is V2 which less than V1. MCU can detect the touch
action by compare this voltage change.
Figure 4. AD charge method physical diagram
MCU
ADC-pin
Figure 5. AD charge method curve graph
V
V1
ΔV
Finger not touch
V2
Finger touching
t
t
www.cypress.com
Document No. 002-05225 Rev.*A
4
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
The AD charge method includes the following steps:
1. Set charge pin to output ‘L’ to discharge the pad
2. Set charge pin to output ‘H’ to charge the pad
3. Get the ADC value periodically
4. Save ADC value
5. Start next sample
The flowchart shown as below
Figure 6. AD charge method Check Flowchart
Start
Discharge the pad
Charge the pad
Wait timer
interrupt
Y
Save ADC value
www.cypress.com
Document No. 002-05225 Rev.*A
5
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
3
Library
This chapter introduces how to use TSC library.
3.1
Library Overview
There are parameters which user need to setup, and 4 functions as API for user’s situations. All the parameters and
functions are introduced as follow.
Table 1. Parameters List
Name
Description
Remark
Key_Const type
TSC Key data structure type define
N/A
TSC_GPIOKEY
TSC GPIO data structure array
N/A
TSC_ADKEY
TSC AD data structure array
N/A
TSC_GPIOKeyNum
TSC GPIO Key Number
N/A
TSC_ADKeyNum
TSC AD Key Number
N/A
TSCKEY_GPIOPORT
TSC GPIO Key IO port
N/A
TSCKEY_ADPORT
TSC AD Key IO port
N/A
TSCKEY_ChargePORT
TSC AD Key Charge port
N/A
TSCKEY_O_WH
TSC Key IO bit
N/A
TSCKEY_GPIOSampleNumConst
TSC GPIO Key sample number
N/A
TSCKEY_ADSampleNumConst
TSC AD Key sample number
N/A
TSC_GPIOThreshold
TSC GPIO Key Threshold data array
N/A
TSC_ADThreshold
TSC AD Key Threshold data array
N/A
TSC_TimerData
TSC Key Timer Dare register
N/A
TSC_TimerEn
TSC Key Timer Start/Stop control bit
N/A
www.cypress.com
Document No. 002-05225 Rev.*A
6
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
Table 2. Functions List
Prototype
Function Description
TSCKey_ADInit
This function initializes the timer used, the data structures of the library
Remark
N/A
and calculates the initial capacitance of the electrodes.
TSCKey_ADCheck
This function is used to Check if the charge process are completed and
N/A
save the value.
TSCKey_GetADValue
This function is used to detect the key touched status, and generate a
N/A
specific key word.
TSCKey_GPIOInit
This function initializes the timer used, the data structures of the library
N/A
and calculates the initial capacitance of the electrodes.
TSCKey_GPIOCheck
This function is used to Check if the charge process are completed and
N/A
save the value.
TSCKey_GetGPIOValue
This function is used to detect the key touched status, and generate a
N/A
specific key word.
TSCKey_UpdateThr
This function is used to update the threshold set by the GUI and refresh
N/A
the detect difference
3.2
3.2.1
Parameters Setup
S t r u c t u r e t yp e d e f i n e
Every TSC Key have 4 attributes include: initial status, count value, threshold value and difference threshold value.
User can define new key directly using the following structure.
typedef struct
{
unsigned
unsigned
unsigned
unsigned
} Key_Const;
char InitFlag;
int
Value;
int
Threshold;
int
DifThreshold;
//**< Contains the initial status
//**< Contains the count value
//**< Contains the threshold value now
//**< Contains the threshold temp value
All the keys which have been defined can make up a array which length will defined by the parameter
TSC_GPIOKeyNum and TSC_ADKeyNum
3.2.2
Port and Pin define
Parameter TSCKEY_GPIOPORT, TSCKEY_ADPORT, TSCKEY_ChargePORT and TSCKEY_O_WH are used to
configure the TSC pin. The TSCKEY_GPIOPORT, TSCKEY_ADPORT, TSCKEY_ChargePORT directly use the
register value on the data sheet, and the TSCKEY_O_WH configured by the first pin (use the continuous pin in same
port are recommend, because that will be good at the sample speed).
www.cypress.com
Document No. 002-05225 Rev.*A
7
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
3.2.3
Sample parameters setup
The parametes:
#define TSCKEY_GPIOSampleNumConst
#define TSCKEY_ADSampleNumConst
100
100
//Sample number
//Sample number
#define TSC_TimerData
T00DR
//Timer Data
#define TSC_TimerEn
T00CR1_STA
//Timer Enable
extern unsigned int TSC_GPIOThreshold[TSC_KeyNum];
extern unsigned int TSC_ADThreshold[TSC_KeyNum];
Used to configure the sample number, threshold, and timer initial value.
3.2.4
Example of Parameters Setup
#define
#define
#define
#define
TSCKEY_ADSampleNumConst
TSCKEY_GPIOSampleNumConst
TSCKEY_ADDifThrOffset 35
TSCKEY_GPIODifThrOffset
#define
#define
#define
#define
#define
#define
#define
#define
TSC_GPIOKeyNum
TSC_ADKeyNum
TSCKEY_GPIOPORT
TSCKEY_ADPORT
TSCKEY_ChargePORT
TSCKEY_O_WH
TSC_TimerData
TSC_TimerEn
typedef struct
{
unsigned
unsigned
unsigned
unsigned
} Key_Const;
100
100
35
//Sample number
//Sample number
//Threshold Difference Offset
//Threshold Difference Offset
8
//TSCKey number
//TSCKey number
//TSCKey port register
0x0000
//TSCKey port register
>> P0
0x0002
//TSCKey port register
0x01
//TSCKey pin dir & data
T00DR
//Timer Data
T00CR1_STA
//Timer Enable
4
0x0014
char InitFlag;
int
Value;
int
Threshold;
int
DifThreshold;
>> P5
>> P1
//**< Contains the initial status
//**< Contains the count value
//**< Contains the threshold value
//**< Contains the difference threshold
extern unsigned int TSC_GPIOThreshold[TSC_KeyNum];
extern unsigned int TSC_ADThreshold[TSC_KeyNum];
extern Key_Const TSC_GPIOKEY[TSC_GPIOKeyNum];
extern Key_Const TSC_ADKEY[TSC_ADKeyNum];
www.cypress.com
Document No. 002-05225 Rev.*A
8
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
3.3
Application Interface
All the functions supplied by the TSC.lib will be introduced below, include the function prototype, input parameter(s),
return value(s), and the function description.
3.3.1
Initialization Function
Table 3. Initialization Function Table (GPIO Method)
Prototype
void TSCKey_GPIOInit (Key_Const *Key);
Parameter:
Key_Const *
Return
Description
Key
Pointer to the TSC Key array
void
This function initializes the timer used, the data structures of the library and calculates the initial
capacitance of the electrodes.
Remark
N/A
Table 4. Initialization Function Table (AD Method)
Prototype
void TSCKey_ADInit (Key_Const *Key);
Parameter:
Key_Const *
Return
Description
Key
Pointer to the TSC Key array
void
This function initializes the timer used, the data structures of the library and calculates the initial
capacitance of the electrodes.
Remark
www.cypress.com
N/A
Document No. 002-05225 Rev.*A
9
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
3.3.2
Check Sensor Function
Table 5. Check Sensor Function Table (GPIO Method)
Prototype
unsigned int TSCKey_GPIOCheck(unsigned char TSC_Port,unsigned char TSC_Pin,unsigned
char TSCKEY_SampleNum)
Parameter:
Return
Description
Remark
unsigned char*
TSC_Port
Port to be checked
unsigned char
TSC_Pin
Pin to be checked
unsigned char
TSCKEY_SampleNum
Sample number
unsigned int
Check_count
The counter value
This function is used to Check if the charge process are completed and save the value.
N/A
Table 6. Check Sensor Function Table (AD Method)
Prototype
unsigned int TSCKey_ADCheck(unsigned char TSC_Port,unsigned char TSC_Pin,unsigned char
TSCKEY_SampleNum)
Parameter:
Return
Description
Remark
www.cypress.com
unsigned char*
TSC_Port
Port to be checked
unsigned char
TSC_Pin
Pin to be checked
unsigned char
TSCKEY_SampleNum
Sample number
unsigned int
Check_count
The counter value
This function is used to Check if the charge process are completed and save the value.
N/A
Document No. 002-05225 Rev.*A
10
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
3.3.3
Get Value Function
Table 7. Get Value Function Table (GPIO Method)
Prototype
unsigned char TSCKey_GetGPIOValue(Key_Const *Key)
Parameter:
Key_Const *
Key
Pointer to the TSC Key array
The Key word for the service
Return
function
unsigned char
TSCKeyValue
Single touch mode: Only the latest
detected key will be set with ‘0’
Multi touch mode: All touched keys
be set with ‘0’
Description
Remark
This function is used to detect the key touched status, and generate a specific key word.
N/A
Table 8. Get Value Function Table (AD Method)
Prototype
unsigned char TSCKey_GetADValue(Key_Const *Key)
Parameter:
Key_Const *
Key
Pointer to the TSC Key array
The Key word for the service
Return
function
unsigned char
TSCKeyValue
Single touch mode: Only the latest
detected key will be set with ‘0’
Multi touch mode: All touched keys
be set with ‘0’
Description
Remark
www.cypress.com
This function is used to detect the key touched status, and generate a specific key word.
N/A
Document No. 002-05225 Rev.*A
11
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
3.3.4
Update Threshold Function
Table 9. Update Threshold Function Table
Prototype
void TSCKey_UpdateThr(Key_Const *Key,unsigned char Key_Num,unsigned int *Key_Thr)
Parameter:
Key_Const *
Key
Pointer to the TSC Key array
unsigned char
Key_Num
Number of TSC Keys
unsigned int *
TSCKEY_SampleNum
Pointer to the TSC Threshold
array
Return
Description
Remark
3.4
void
This function is used to update the threshold set by the GUI and refresh the detect difference
N/A
Cypress TSC Performance
Table 10. Performance
Resource
ROM
Amount
1272 Byte
Description
ROM space:
If just need support 1 sensor, ROM of lib can be reduced to: 300 Byte
If just need support 2 sensors, ROM of lib can be reduced to: 960 Byte
If just need support 3 sensors, ROM of lib can be reduced to: 1120 Byte
If need support 4 sensors, ROM of Lib is:1272 Byte
RAM
36 Byte
RAM space:
If just need support 1 sensor, RAM of lib can be reduced to: 11 Byte
If just need support 2 sensors, RAM of lib can be reduced to: 26 Byte
If just need support 3 sensors, RAM of lib can be reduced to: 31 Byte
If need support 4 sensors, RAM of Lib is:36 Byte
IO Port
1
P0
IO Pin
4
P04,P05,P06,P07
Timer
2
Timebase Timer
Serial Port
1
Serial Port(P04,P05),only use in check threshold mode
Machine Clock
>=8M
Scan 1 Key
2 ms
www.cypress.com
Document No. 002-05225 Rev.*A
12
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
3.5
3.5.1
How to Add Fujitsu TSC.lib
Ad d F u j i t s u T S C . l i b t o U s e r ’ s P r o j e c t
1. In Softune, Right click on folder Include Files  select Add member to folder from the menu select File.
Figure 7. Add member to folder
2.
Because the default option of file type filters is *.c and * .asm, you can’t found TSC.lib in dialog box of Add
Member.
Figure 8. Popup Add Member dialog box
www.cypress.com
Document No. 002-05225 Rev.*A
13
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
3.
In Add Member dialog box, select ‘ALL Files’ from ‘Files of Type’, and then you will find the TSC.lib
Figure 9. Found the lib file
4.
Double click TSC.lib, and then you can see it has been added in the folder Include Files
Figure 10. Add TSC.lib
www.cypress.com
Document No. 002-05225 Rev.*A
14
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
3.5.2
Include Header File
1.
Add "#include"TSC.h "" in C file, such as in "main.c ".
Figure 11. Add include statement in C file
2.
Compile the whole project, "TSC.h" will link TSC.lib to c file, so that user program can use API functions in
TSC.lib.
Figure 12. Include header file successfully
www.cypress.com
Document No. 002-05225 Rev.*A
15
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
3.6
How to use Cypress TSC.lib
After complete above works, we can start use the TSC library now. The operation categorised by if connect to GUI.
Both of two operations need initialize TSC, initialize Timer, initialize GPIO and initialize interrupt. If connect to GUI,
the UART module should also be initialized.
Figure 13. Initialize Flow chart
Start
Disable comparer
Disable system interrupt
Set Oscillator
Set interrupt level
Enable system interrupt
Initialize the GPIO
Initialize the UART
Initialize the timer
End
After all used modules have been initialized, program go into a endless loop, to do below step circularly:
1.
Wait the time interval interrupt is generate, clear the interrupt flag
2.
Check the electrodes and save the counter value
3.
Judgement if the new value bigger or lower than the threshold, if meet the condition, generate the key word
4.
According to the key word jump to corresponding operation (such as drive LED)
5.
Go to another new loop
If connect GUI, in above process, there also have the UART interrupt, MCU need send out counter value or get new
threshold from GUI. The direct of transmission is determined by the user-defined protocol.
www.cypress.com
Document No. 002-05225 Rev.*A
16
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
Figure 14. Main loop Flowchart
Start
Wait time interrupt
Check sensor
Save counter value
N
UART
Communication
GUI
Meet
detect condition?
Y
Generate key word
Key service
www.cypress.com
Document No. 002-05225 Rev.*A
17
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
4
LIB Usage Notice
This chapter introduces LIB usage notice.

Machine clock
The machine clock should be set to 8M or above. If the machine clock is less than 8M, the sensor response is slow.

Interrupt
This solution needs to use Timebase Timer interrupt to check sensor, and the interval time is 512us. It is unnecessary
to use UART if the threshold is not gotten or tested with TSC GUI, and the interrupt setting in “vector.c” as following:
#include " mb95390.h"
/******************************************************************************
InitIrqLevels()
This function pre-sets all interrupt control registers. It can be used
to set all interrupt priorities in static applications. If this file
contains assignments to dedicated resources, verify that the
appropriate controller is used.
******************************************************************************/
void InitIrqLevels(void)
{
#ifdef enableUART
ILR2 = 0xFE;
// IRQ8: LIN-UART (transmission)
#else
ILR2 = 0xFF;
// IRQ8: LIN-UART (transmission)
#endif
ILR4 = 0x3F;
// IRQ19: Timebase timer
}
/******************************************************************************
Prototypes
Add your own prototypes here. Each vector definition needs is prototype.
Either do it here or include a header file containing them.
******************************************************************************/
__interrupt void DefaultIRQHandler (void);
#ifdef enableUART
__interrupt void UART_ISR (void);
#endif
__interrupt void TBT_ISR (void);
/******************************************************************************
Vector definition
Use following statements to define vectors.
All resource related vectors are predefined.
Remaining software interrupts can be added hereas well.
******************************************************************************/
#ifdef enableUART
#pragma intvect UART_T
8
// IRQ8: LIN-UART (transmission)
#else
#pragma intvect DefaultIRQHandler
8
// IRQ8: LIN-UART (transmission)
#endif
#pragma intvect TBT_ISR
19 // IRQ19: Time base timer
www.cypress.com
Document No. 002-05225 Rev.*A
18
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
5
Appendix
5.1
5.1.1
Sample code
Main Function
File Name: main.c
Function: Initialize and configure
/********************************************************************************************
-File:
main.c
-Author:
Lee Song
-Date:
20110510
-Function:Initialize and configure
*********************************************************************************************/
#include "Lcd_StateGrid.h"
#include "main.h"
#include "PortDef.h"
#include "HardKey.h"
#include "TSC.h"
extern UCHAR disUpdateFlage;
extern UCHAR HideDataBuff[8];
unsigned char TSCUpdateFlag;
extern void TBT_Init(void);
volatile unsigned int Div_Counter = 0;
//=====================================================================
// Initial GPIO peripheral
//=====================================================================
void GPIO_Init(void)
{
LCDCE1 = 0;
//Set for use GPIO
LCDCE1_PICTL = 1;
//Set for use GPIO
LED1_Off;
LED2_Off;
LEDCtrl_DirOut;
HKEYInput_DirIn;
BeepCtrl_Off;
BeepCtrl_DirOut;
//BEEP_Dir
}
//==================================================================
// Beeper control function
//==================================================================
void Beep(unsigned char num,unsigned char delay)
{
unsigned int i,j,k;
for(k=0;k<num;k++)
{
BeepCtrl_On;
for(i=0;i<100;i++)
{
for(j=0;j<delay;j++);
}
BeepCtrl_Off;
for(i=0;i<100;i++)
{
for(j=0;j<delay;j++);
}
}
}
www.cypress.com
Document No. 002-05225 Rev.*A
19
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
//==================================================================
// FunctionName: main
// Description:
main function
// Input: None
// Return: None
//==================================================================
void main(void)
{
UCHAR dataBuff[8] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
unsigned char i = 0;
unsigned char j = 1;
CMR0_VCID = 1;
//Disable CMP input
__DI();
Osc_Setup();
//Setup MCU main oscillator/FLL
InitIrqLevels();
//Initialise Interrupt level register and IRQ vector table
__EI();
//Enable system interrupt now
GPIO_Init();
TBT_Init();
IIC_Init();
#ifdef enableUART
UART_Init();
#endif
do
{
LED1_On;
LED2_On;
if(TSCUpdateFlag == 1)
{
Div_Counter++;
TSCUpdateFlag = 0;
}
}
while(Div_Counter < 30);
Div_Counter = 0;
LED1_Off;
LED2_Off;
Beep(2,500);
TSCKey_Init(TSCKEY);
while(1)
{
CallUpDateKey();
TSCKey_Service();
if(TSCUpdateFlag == 1)
{
TSCUpdateFlag = 0;
if((Div_Counter % 9) == 0)
{
TSCKey_UpdateThr(TSCKEY,TSC_KeyNum,TSC_Threshold);
}
if(Div_Counter == 360)
{
Div_Counter = 0;
}
Div_Counter++;
}
}
}
www.cypress.com
Document No. 002-05225 Rev.*A
20
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
//==================================================================
// Setup MCU main oscillator/FLL
// Internal clock 243KHz. Set FLL for 11MHz Bus frequency
//==================================================================
void Osc_Setup(void)
{
SYSC &=0xbf;
//Set PF0/PF1 as main CR pin,set PG1/PG2 as GPIO
SYCC =0xf0;
WATR =0xf3;
SYCC2 =0xf4;
while(STBC_MRDY == 0);
RESET_WATCHDOG();
}
//==================================================================
// Reset the watch dog timer
//==================================================================
void RESET_WATCHDOG(void)
{
WDTC = 0x35;
}
www.cypress.com
Document No. 002-05225 Rev.*A
21
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
5.1.2
Uart Function
File Name: Uart.c
Function: Initialize and configure UART module
/********************************************************************************************
-File:
Uart.c
-Author:
Lee Song
-Date:
20110610
-Function: Initialize and configure UART module
*********************************************************************************************/
#include "mb95390.h"
#include "TSC.h"
#include "Uart.h"
unsigned
unsigned
unsigned
unsigned
unsigned
unsigned
unsigned
unsigned
char
char
char
char
char
char
char
char
UART_Start = 0;
UART_Sent = 0;
UART_Get = 0;
Threshold_N = 0;
UART_Setfinish = 0;
*pTSC_Threshold = (unsigned char *)TSC_Threshold;
UART_TSCValue[UART_DBUFF_LEN] = {0};
UART_TSCStatus[UART_SBUFF_LEN] = {0};
unsigned char UART_DBUFF_PTR = 0;
unsigned char UART_SBUFF_PTR = 0;
void UART_Init(void)
{
UART_Dir_IN;
UART_Dir_OUT;
SMC10 = 0x0C; // UART/SIO Serial Mode Control Register 1 (SMC10)
// |||||||+------Operating mode select bit (Clock asynchronous mode (UART))
// |||||++------Clock select bit(Dedicated baud rate generator)
// ||||+--------Character bit length control bits(8 bits)
// |||+---------Stop bit length control bit(2-bit length)
// ||+----------Parity control bit(No parity)
// |+-----------Parity polarity bit(Even parity)
// +-----------Serial data direction control bit(Transmit/receive data from MSB side
sequentially)
SMC20 = 0x5E;// UART/SIO Serial Mode Control Register 2 (SMC20)
// |||||||+------Transmission data register empty interrupt enable bit(Disables
//
transmission data register empty interrupts)
// ||||||+------Transmission completion interrupt enable bit(Enables transmission
//
completion interrupts)
// |||||+-------Reception interrupt enable bit(Enables reception interrupts)
// ||||+--------Transmission operation enable bit(Enables transmission operation)
// |||+---------Reception operation enable bit(Enables reception operation)
// ||+----------Reception error flag clear bit(Clears the error flags in the SSR0
register)
// |+-----------Serial data output enable bit(Enables serial data output)
// +-----------Serial data output enable bit(Disables serial clock output (usable as
//
a general-purpose port))
PSSR0 = 0x04; // UART/SIO Dedicated Baud Rate Generator Prescaler Select Register (PSSR0)
// ||||||++------Prescaler select bits(1/1)
// |||||+---------Baud rate clock output enable bit(Enables transmission completion
interrupts)
// +++++--------Undefined bit
BRSR0 = 26;
// UART/SIO Dedicated Baud Rate Generator Baud Rate Setting
// Register (BRSR0)
// 2 ~ 255
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////
//////// Sample Asynchronous Transfer Rates by Baud Rate Generator ///////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////
//
Total division ratio
Baud rate
/////////////////////////////////////
www.cypress.com
Document No. 002-05225 Rev.*A
22
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
//
(PSS × BRS × 4)
(Machine Clock/Total division ratio)////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////
SSR0 = 0x00;
// UART/SIO Serial Status Register (SSR0)
// |||||||+-----Transmit data register empty flag
//
(0:Transmit data present / 1:Transmit data absent)
// ||||||+------Transmission completion flag
// |+-----------Parity polarity bit(Even parity)
// +-----------Serial data direction control bit(Transmit/receive data from MSB side
sequentially)
}
void UART_Transmit(void)
{
if(UART_Sent == 1)
{
if(UART_DBUFF_PTR < UART_DBUFF_LEN) //Sent the data
{
TDR0 = UART_TSCValue[UART_DBUFF_PTR++];
}
else if(UART_DBUFF_PTR < (UART_DBUFF_LEN << 1))
//Sent the threshold
{
TDR0 = pTSC_Threshold[UART_DBUFF_PTR - UART_DBUFF_LEN];
UART_DBUFF_PTR++;
}
else if(UART_DBUFF_PTR == (UART_DBUFF_LEN << 1))
{
UART_Sent = 0;
UART_DBUFF_PTR = 0;
}
}
else if(UART_Sent == 2)
//Sent the board status
{
if(UART_SBUFF_PTR < UART_SBUFF_LEN)
{
TDR0 = UART_TSCStatus[UART_SBUFF_PTR++];
}
else
{
UART_Sent = 0;
UART_SBUFF_PTR = 0;
}
}
else
{
SSR0_TCPL = 0;
}
}
www.cypress.com
Document No. 002-05225 Rev.*A
23
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
__interrupt void UART_ISR (void)
{
unsigned char UART_Temp;
SMC20_RERC = 0;
if(SSR0_RDRF == 1)
//Receive Data
{
SSR0_RDRF = 0;
if(UART_Get == 0)
{
UART_Temp = RDR0;
switch(UART_Temp)
{
case UART_Connect:
{
TDR0 = UART_Check_OK;
UART_Start = 1;
break;
}
case UART_Getdata:
{
UART_Sent = 1;
SSR0_TCPL = 1;
TDR0 = UART_TSCValue[UART_DBUFF_PTR++];
break;
}
case UART_Getstatus:
{
UART_Sent = 2;
SSR0_TCPL = 1;
TDR0 = UART_TSCStatus[UART_SBUFF_PTR++];
break;
}
case UART_Setdata:
{
TDR0 = UART_SetBack;
Threshold_N = 0;
UART_Get = 1;
break;
}
case UART_Disconnect:
{
UART_Start = 0;
break;
}
default:
{
TDR0 = UART_Check_Erro;
break;
}
}
}
else
//Set threshold by GUI
{
if(Threshold_N < UART_DBUFF_LEN)
{
pTSC_Threshold[Threshold_N] = RDR0;
TDR0 = UART_SetBack;
Threshold_N++;
}
else if(Threshold_N == UART_DBUFF_LEN)
{
UART_Get = 0;
Threshold_N = 0;
UART_Setfinish = 1;
TSCKey_UpdateThr(TSCKEY,TSC_KeyNum);//,TSC_Threshold);
}
}
www.cypress.com
Document No. 002-05225 Rev.*A
24
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
}
else if(SSR0_TDRE == 1)
{
SSR0_TDRE = 0;
if(UART_Get == 0)
UART_Transmit();
}
//Sent Data
}
File Name: Uart.h
Function: Header file of UART module
/********************************************************************************************
-File:
Uart.h
-Function: Header file of UART module
/*********************************************************************************************/
#include "TSC.h"
#define UART_DBUFF_LEN
(TSC_KeyNum<<1)
#define UART_SBUFF_LEN
10
#define UART_Dir_IN
DDR1_P10 = 0
#define UART_Dir_OUT
DDR1_P11 = 1
#define UART_Connect
0x0F
#define UART_Getdata
0x5F
#define UART_Getstatus
0x6F
#define UART_Setdata
0xAF
#define UART_SetBack
0xCF
#define UART_Disconnect
0xBF
#define UART_Check_OK
0xFF
#define UART_Check_Erro
0xEF
extern unsigned char UART_TSCValue[UART_DBUFF_LEN];
extern unsigned char UART_TSCStatus[UART_SBUFF_LEN];
void UART_Init(void);
void UART_Transmit(void);
www.cypress.com
Document No. 002-05225 Rev.*A
25
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
5.1.3
K e y_ S e r vi c e F u n c t i o n
File Name: Key_Service.c
Function: Key press service function
/********************************************************************************************
-File:
Key_Service.c
-Author:
Lee Song
-Date:
20110610
-Function: Key press service function
*********************************************************************************************/
#include "mb95390.h"
#include "PortDef.h"
#include "TSC.h"
unsigned char TSCKeyCode = 0xFF;
unsigned char mTSCKeyCode = 0xFF;
unsigned int Key_Task_Time=0;
extern unsigned char TSCKeyCode;
extern volatile
unsigned int Now_Time;
void CallUpDateKey(void)
{
unsigned char TmpCode = 0xff;
unsigned char TSCTmpCode = 0xff;
if(Now_Time-Key_Task_Time >= 1)
{
Key_Task_Time = Now_Time;
TSCTmpCode = TSCKey_GetValue(TSCKEY);
if (TSCTmpCode == TSCOldCode)
TSCKeyCode = TSCTmpCode;
else
TSCOldCode = TSCTmpCode;
}
}
void TSCKey_Service(void)
{
unsigned char i;
if(mTSCKeyCode != TSCKeyCode)
{
if(TSCKeyCode != 0xFF)
{
for(i=0;i<4;i++)
{
if((TSCKeyCode | (1 << i)) == 0xFF)break;
}
Beep(1,500);
}
mTSCKeyCode = TSCKeyCode;
}
}
www.cypress.com
Document No. 002-05225 Rev.*A
26
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
6
Additional Information
For more information on Cypress Microcontrollers Products, please visit the following websites:
http://www.cypress.com/cypress-microcontrollers
http://www.cypress.com/cypress-mcu-product-softwareexamples
www.cypress.com
Document No. 002-05225 Rev.*A
27
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
Document History
Document Title: AN205225 – F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
Document Number: 002-05225
Revision
**
ECN
-
Orig. of
Change
Submission
Date
Description of Change
Ivan Xiao
06/03/2011
First Draft
Lee Song
07/29/2011
1 Update template to the latest version
2 Modify API name and function description based on new TSC.lib
3 Add new sample code, include UART and Key service functions
*A
5277681
HUAL
05/19/2016
Migrated Spansion Application Note “MCU-AN-500123-E-11” to Cypress
format.
www.cypress.com
Document No. 002-05225 Rev.*A
28
F²MC - 8FX Family, MB95F390H Series, Capacitance Touch Sensor use Tsc2_Demo_398.Lib
Worldwide Sales and Design Support
Cypress maintains a worldwide network of offices, solution centers, manufacturer’s representatives, and distributors. To find
the office closest to you, visit us at Cypress Locations.
Products
®
®
PSoC® Solutions
ARM Cortex Microcontrollers
cypress.com/arm
Automotive
cypress.com/automotive
PSoC 1 | PSoC 3 | PSoC 4 | PSoC 5LP
Clocks & Buffers
cypress.com/clocks
Cypress Developer Community
Interface
cypress.com/interface
Forums | Projects | Videos | Blogs | Training | Components
Lighting & Power Control
cypress.com/powerpsoc
Memory
cypress.com/memory
PSoC
cypress.com/psoc
Touch Sensing
cypress.com/touch
USB Controllers
cypress.com/usb
Wireless/RF
cypress.com/wireless
Technical Support
cypress.com/support
PSoC is a registered trademark and PSoC Creator is a trademark of Cypress Semiconductor Corporation. All other trademarks or registered trademarks
referenced herein are the property of their respective owners.
Cypress Semiconductor
198 Champion Court
San Jose, CA 95134-1709
Phone
Fax
Website
: 408-943-2600
: 408-943-4730
: www.cypress.com
© Cypress Semiconductor Corporation,2011-2016. This document is the property of Cypress Semiconductor Corporation and its subsidiaries, including
Spansion LLC (“Cypress”). This document, including any software or firmware included or referenced in this document (“Software”), is owned by
Cypress under the intellectual property laws and treaties of the United States and other countries worldwide. Cypress reserves all rights under such
laws and treaties and does not, except as specifically stated in this paragraph, grant any license under its patents, copyrights, trademarks, or other
intellectual property rights. If the Software is not accompanied by a license agreement and you do not otherwise have a written agreement with
Cypress governing the use of the Software, then Cypress hereby grants you a personal, non-exclusive, nontransferable license (without the right to
sublicense) (1) under its copyright rights in the Software (a) for Software provided in source code form, to modify and reproduce the Software solely for
use with Cypress hardware products, only internally within your organization, and (b) to distribute the Software in binary code form externally to end
users (either directly or indirectly through resellers and distributors), solely for use on Cypress hardware product units, and (2) under those claims of
Cypress’s patents that are infringed by the Software (as provided by Cypress, unmodified) to make, use, distribute, and import the Software solely for
use with Cypress hardware products. Any other use, reproduction, modification, translation, or compilation of the Software is prohibited.
TO THE EXTENT PERMITTED BY APPLICABLE LAW, CYPRESS MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD
TO THIS DOCUMENT OR ANY SOFTWARE OR ACCOMPANYING HARDWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. To the extent permitted by applicable law, Cypress reserves the right to
make changes to this document without further notice. Cypress does not assume any liability arising out of the application or use of any product or
circuit described in this document. Any information provided in this document, including any sample design information or programming code, is
provided only for reference purposes. It is the responsibility of the user of this document to properly design, program, and test the functionality and
safety of any application made of this information and any resulting product. Cypress products are not designed, intended, or authorized for use as
critical components in systems designed or intended for the operation of weapons, weapons systems, nuclear installations, life-support devices or
systems, other medical devices or systems (including resuscitation equipment and surgical implants), pollution control or hazardous substances
management, or other uses where the failure of the device or system could cause personal injury, death, or property damage (“Unintended Uses”). A
critical component is any component of a device or system whose failure to perform can be reasonably expected to cause the failure of the device or
system, or to affect its safety or effectiveness. Cypress is not liable, in whole or in part, and you shall and hereby do release Cypress from any claim,
damage, or other liability arising from or related to all Unintended Uses of Cypress products. You shall indemnify and hold Cypress harmless from and
against all claims, costs, damages, and other liabilities, including claims for personal injury or death, arising from or related to any Unintended Uses of
Cypress products.
Cypress, the Cypress logo, Spansion, the Spansion logo, and combinations thereof, PSoC, CapSense, EZ-USB, F-RAM, and Traveo are trademarks or
registered trademarks of Cypress in the United States and other countries. For a more complete list of Cypress trademarks, visit cypress.com. Other
names and brands may be claimed as property of their respective owners.
www.cypress.com
Document No. 002-05225 Rev.*A
29