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