stm8l15x_tsl_ct_acquisition.c
来自「STM8s」· C语言 代码 · 共 1,126 行 · 第 1/3 页
C
1,126 行
/**
******************************************************************************
* @file stm8l15x_tsl_ct_acquisition.c
* @author MCD Application Team
* @version V2.3.1
* @date 14-February-2011
* @brief STM8 Touch Sensing Library - This file provides all the functions
* to manage the Charge-Transfer acquisition based on STM8L15x devices.
******************************************************************************
* @attention
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
*/
/* Includes ------------------------------------------------------------------*/
#include "stm8l15x_tsl_ct_acquisition.h"
#include "stm8_tsl_services.h"
#include "stm8_tsl_conf.h"
#if defined(CHARGE_TRANSFER) && defined(STM8L15X)
/* Memory section ------------------------------------------------------------*/
#if defined(_COSMIC_) && defined(USE_PRAGMA_SECTION)
#pragma section [TSL_IO_RAM]
#pragma section @tiny [TSL_IO_RAM0]
#pragma section const {TSL_IO_CONST}
#pragma section (TSL_IO_CODE)
#endif
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
//define the init value for the channel
#define INIT_VALUE 0x0000
//define the 1st Channel mask
#if SCKEY_P1_CH == CH1
#define SCKEY_P1_MASK (SCKEY_P1_A | SCKEY_P1_B | SCKEY_P1_C | SCKEY_P1_D | SCKEY_P1_E | SCKEY_P1_F | SCKEY_P1_G | SCKEY_P1_H | MKEY_CH1_MASK | ACTIVE_SHIELD_GROUP)
#elif SCKEY_P1_CH == CH2
#define SCKEY_P1_MASK (SCKEY_P1_A | SCKEY_P1_B | SCKEY_P1_C | SCKEY_P1_D | SCKEY_P1_E | SCKEY_P1_F | SCKEY_P1_G | SCKEY_P1_H | MKEY_CH2_MASK | ACTIVE_SHIELD_GROUP)
#else //SCKEY_P1_CH == CH3
#define SCKEY_P1_MASK (SCKEY_P1_A | SCKEY_P1_B | SCKEY_P1_C | SCKEY_P1_D | SCKEY_P1_E | SCKEY_P1_F | SCKEY_P1_G | SCKEY_P1_H | MKEY_CH3_MASK | ACTIVE_SHIELD_GROUP)
#endif
//define the 2nd Channel mask
#if (NUMBER_OF_ACQUISITION_PORTS > 1)
#if SCKEY_P2_CH == CH1
#define SCKEY_P2_MASK (SCKEY_P2_A | SCKEY_P2_B | SCKEY_P2_C | SCKEY_P2_D | SCKEY_P2_E | SCKEY_P2_F | SCKEY_P2_G | SCKEY_P2_H | MKEY_CH1_MASK | ACTIVE_SHIELD_GROUP)
#elif SCKEY_P2_CH == CH2
#define SCKEY_P2_MASK (SCKEY_P2_A | SCKEY_P2_B | SCKEY_P2_C | SCKEY_P2_D | SCKEY_P2_E | SCKEY_P2_F | SCKEY_P2_G | SCKEY_P2_H | MKEY_CH2_MASK | ACTIVE_SHIELD_GROUP)
#else //SCKEY_P2_CH == CH3
#define SCKEY_P2_MASK (SCKEY_P2_A | SCKEY_P2_B | SCKEY_P2_C | SCKEY_P2_D | SCKEY_P2_E | SCKEY_P2_F | SCKEY_P2_G | SCKEY_P2_H | MKEY_CH3_MASK | ACTIVE_SHIELD_GROUP)
#endif
#else
#define SCKEY_P2_MASK (0)
#endif
//define the SAMPLING capacitor channel mask
#define SAMP_CAP_MASK (SCKEY_P1_MASK | SCKEY_P2_MASK)
#if (SCKEY_P1_CH == CH1)
#define CCMR_P1 (RI->IOCMR1)
#define IOSR_P1 (RI->IOSR1)
#define CGCR_P1_PP_LOW_MASK (0x00)
#define CGCR_P1_PP_HIGH_MASK (0x01)
#define CGCR_P1_SW_OPEN_MASK (0x02)
#define CGCR_P1_SW_CLOSE_MASK (0x03)
#define CGCR_P1_GLOBAL_MASK (0xFC)
#elif (SCKEY_P1_CH == CH2)
#define CCMR_P1 (RI->IOCMR2)
#define IOSR_P1 (RI->IOSR2)
#define CGCR_P1_PP_LOW_MASK (0x00)
#define CGCR_P1_PP_HIGH_MASK (0x04)
#define CGCR_P1_SW_OPEN_MASK (0x08)
#define CGCR_P1_SW_CLOSE_MASK (0x0C)
#define CGCR_P1_GLOBAL_MASK (0xF3)
#else //(SCKEY_P1_CH == CH3)
#define CCMR_P1 (RI->IOCMR3)
#define IOSR_P1 (RI->IOSR3)
#define CGCR_P1_PP_LOW_MASK (0x00)
#define CGCR_P1_PP_HIGH_MASK (0x10)
#define CGCR_P1_SW_OPEN_MASK (0x20)
#define CGCR_P1_SW_CLOSE_MASK (0x30)
#define CGCR_P1_GLOBAL_MASK (0xCF)
#endif
#if NUMBER_OF_ACQUISITION_PORTS > 1
#if (SCKEY_P2_CH == CH1)
#define CCMR_P2 (RI->IOCMR1)
#define IOSR_P2 (RI->IOSR1)
#define CGCR_P2_PP_LOW_MASK (0x00)
#define CGCR_P2_PP_HIGH_MASK (0x01)
#define CGCR_P2_SW_OPEN_MASK (0x02)
#define CGCR_P2_SW_CLOSE_MASK (0x03)
#define CGCR_P2_GLOBAL_MASK (0xFC)
#elif (SCKEY_P2_CH == CH2)
#define CCMR_P2 (RI->IOCMR2)
#define IOSR_P2 (RI->IOSR2)
#define CGCR_P2_PP_LOW_MASK (0x00)
#define CGCR_P2_PP_HIGH_MASK (0x04)
#define CGCR_P2_SW_OPEN_MASK (0x08)
#define CGCR_P2_SW_CLOSE_MASK (0x0C)
#define CGCR_P2_GLOBAL_MASK (0xF3)
#else //(SCKEY_P2_CH == CH3)
#define CCMR_P2 (RI->IOCMR3)
#define IOSR_P2 (RI->IOSR3)
#define CGCR_P2_PP_LOW_MASK (0x00)
#define CGCR_P2_PP_HIGH_MASK (0x10)
#define CGCR_P2_SW_OPEN_MASK (0x20)
#define CGCR_P2_SW_CLOSE_MASK (0x30)
#define CGCR_P2_GLOBAL_MASK (0xCF)
#endif
#endif
#if (SAMP_CAP_CH == CH1)
#define CCMR_SAMP (RI->IOCMR1)
#define IOSR_SAMP (RI->IOSR1)
#define CSR_SAMP (RI->IOIR1)
#define CGCR_SAMP_PP_LOW_MASK (0x00)
#define CGCR_SAMP_PP_HIGH_MASK (0x01)
#define CGCR_SAMP_SW_OPEN_MASK (0x02)
#define CGCR_SAMP_SW_CLOSE_MASK (0x03)
#define CGCR_SAMP_GLOBAL_MASK (0xFC)
#elif (SAMP_CAP_CH == CH2)
#define CCMR_SAMP (RI->IOCMR2)
#define IOSR_SAMP (RI->IOSR2)
#define CSR_SAMP (RI->IOIR2)
#define CGCR_SAMP_PP_LOW_MASK (0x00)
#define CGCR_SAMP_PP_HIGH_MASK (0x04)
#define CGCR_SAMP_SW_OPEN_MASK (0x08)
#define CGCR_SAMP_SW_CLOSE_MASK (0x0C)
#define CGCR_SAMP_GLOBAL_MASK (0xF3)
#else //(SCKEY_SAMP_CH == CH3)
#define CCMR_SAMP (RI->IOCMR3)
#define IOSR_SAMP (RI->IOSR3)
#define CSR_SAMP (RI->IOIR3)
#define CGCR_SAMP_PP_LOW_MASK (0x00)
#define CGCR_SAMP_PP_HIGH_MASK (0x10)
#define CGCR_SAMP_SW_OPEN_MASK (0x20)
#define CGCR_SAMP_SW_CLOSE_MASK (0x30)
#define CGCR_SAMP_GLOBAL_MASK (0xCF)
#endif
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
#if SPREAD_SPECTRUM
#if SW_SPREAD_SPECTRUM
static u8 SpreadCounter;
#endif //SW_SPREAD_SPECTRUM
u8 Previous_calibration_value;
#endif //SPREAD_SPECTRUM
TOUCH_PORT_Info_T TINY sTouchIO;
u16 TINY CounterStop;
u8 TINY SamplingShifter;
u8 TINY AcquisitionBitMask;
Info_Channel Channel_P1;
Info_Channel Channel_P2;
Info_Channel Channel_P3;
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/* This table is always defined */
#if NUMBER_OF_SINGLE_CHANNEL_PORTS > 0
__CONST u8 Table_SCKEY_P1[SCKEY_P1_KEY_COUNT] =
{
#if (SCKEY_P1_A == GROUP1)
0x00
#elif (SCKEY_P1_A == GROUP2)
0x01
#elif (SCKEY_P1_A == GROUP3)
0x02
#elif (SCKEY_P1_A == GROUP4)
0x03
#elif (SCKEY_P1_A == GROUP5)
0x04
#elif (SCKEY_P1_A == GROUP6)
0x05
#elif (SCKEY_P1_A == GROUP7)
0x06
#elif (SCKEY_P1_A == GROUP8)
0x07
#endif
#if SCKEY_P1_KEY_COUNT > 1
#if (SCKEY_P1_B == GROUP1)
, 0x00
#elif (SCKEY_P1_B == GROUP2)
, 0x01
#elif (SCKEY_P1_B == GROUP3)
, 0x02
#elif (SCKEY_P1_B == GROUP4)
, 0x03
#elif (SCKEY_P1_B == GROUP5)
, 0x04
#elif (SCKEY_P1_B == GROUP6)
, 0x05
#elif (SCKEY_P1_B == GROUP7)
, 0x06
#elif (SCKEY_P1_B == GROUP8)
, 0x07
#endif
#endif
#if SCKEY_P1_KEY_COUNT > 2
#if (SCKEY_P1_C == GROUP1)
, 0x00
#elif (SCKEY_P1_C == GROUP2)
, 0x01
#elif (SCKEY_P1_C == GROUP3)
, 0x02
#elif (SCKEY_P1_C == GROUP4)
, 0x03
#elif (SCKEY_P1_C == GROUP5)
, 0x04
#elif (SCKEY_P1_C == GROUP6)
, 0x05
#elif (SCKEY_P1_C == GROUP7)
, 0x06
#elif (SCKEY_P1_C == GROUP8)
, 0x07
#endif
#endif
#if SCKEY_P1_KEY_COUNT > 3
#if (SCKEY_P1_D == GROUP1)
, 0x00
#elif (SCKEY_P1_D == GROUP2)
, 0x01
#elif (SCKEY_P1_D == GROUP3)
, 0x02
#elif (SCKEY_P1_D == GROUP4)
, 0x03
#elif (SCKEY_P1_D == GROUP5)
, 0x04
#elif (SCKEY_P1_D == GROUP6)
, 0x05
#elif (SCKEY_P1_D == GROUP7)
, 0x06
#elif (SCKEY_P1_D == GROUP8)
, 0x07
#endif
#endif
#if SCKEY_P1_KEY_COUNT > 4
#if (SCKEY_P1_E == GROUP1)
, 0x00
#elif (SCKEY_P1_E == GROUP2)
, 0x01
#elif (SCKEY_P1_E == GROUP3)
, 0x02
#elif (SCKEY_P1_E == GROUP4)
, 0x03
#elif (SCKEY_P1_E == GROUP5)
, 0x04
#elif (SCKEY_P1_E == GROUP6)
, 0x05
#elif (SCKEY_P1_E == GROUP7)
, 0x06
#elif (SCKEY_P1_E == GROUP8)
, 0x07
#endif
#endif
#if SCKEY_P1_KEY_COUNT > 5
#if (SCKEY_P1_F == GROUP1)
, 0x00
#elif (SCKEY_P1_F == GROUP2)
, 0x01
#elif (SCKEY_P1_F == GROUP3)
, 0x02
#elif (SCKEY_P1_F == GROUP4)
, 0x03
#elif (SCKEY_P1_F == GROUP5)
, 0x04
#elif (SCKEY_P1_F == GROUP6)
, 0x05
#elif (SCKEY_P1_F == GROUP7)
, 0x06
#elif (SCKEY_P1_F == GROUP8)
, 0x07
#endif
#endif
#if SCKEY_P1_KEY_COUNT > 6
#if (SCKEY_P1_G == GROUP1)
, 0x00
#elif (SCKEY_P1_G == GROUP2)
, 0x01
#elif (SCKEY_P1_G == GROUP3)
, 0x02
#elif (SCKEY_P1_G == GROUP4)
, 0x03
#elif (SCKEY_P1_G == GROUP5)
, 0x04
#elif (SCKEY_P1_G == GROUP6)
, 0x05
#elif (SCKEY_P1_G == GROUP7)
, 0x06
#elif (SCKEY_P1_G == GROUP8)
, 0x07
#endif
#endif
#if SCKEY_P1_KEY_COUNT > 7
#if (SCKEY_P1_H == GROUP1)
, 0x00
#elif (SCKEY_P1_H == GROUP2)
, 0x01
#elif (SCKEY_P1_H == GROUP3)
, 0x02
#elif (SCKEY_P1_H == GROUP4)
, 0x03
#elif (SCKEY_P1_H == GROUP5)
, 0x04
#elif (SCKEY_P1_H == GROUP6)
, 0x05
#elif (SCKEY_P1_H == GROUP7)
, 0x06
#elif (SCKEY_P1_H == GROUP8)
, 0x07
#endif
#endif
};
#endif
#if NUMBER_OF_SINGLE_CHANNEL_PORTS > 1
__CONST u8 Table_SCKEY_P2[SCKEY_P2_KEY_COUNT] =
{
#if (SCKEY_P2_A == GROUP1)
0x00
#elif (SCKEY_P2_A == GROUP2)
0x01
#elif (SCKEY_P2_A == GROUP3)
0x02
#elif (SCKEY_P2_A == GROUP4)
0x03
#elif (SCKEY_P2_A == GROUP5)
0x04
#elif (SCKEY_P2_A == GROUP6)
0x05
#elif (SCKEY_P2_A == GROUP7)
0x06
#elif (SCKEY_P2_A == GROUP8)
0x07
#endif
#if SCKEY_P2_KEY_COUNT > 1
#if (SCKEY_P2_B == GROUP1)
, 0x00
#elif (SCKEY_P2_B == GROUP2)
, 0x01
#elif (SCKEY_P2_B == GROUP3)
, 0x02
#elif (SCKEY_P2_B == GROUP4)
, 0x03
#elif (SCKEY_P2_B == GROUP5)
, 0x04
#elif (SCKEY_P2_B == GROUP6)
, 0x05
#elif (SCKEY_P2_B == GROUP7)
, 0x06
#elif (SCKEY_P2_B == GROUP8)
, 0x07
#endif
#endif
#if SCKEY_P2_KEY_COUNT > 2
#if (SCKEY_P2_C == GROUP1)
, 0x00
#elif (SCKEY_P2_C == GROUP2)
, 0x01
#elif (SCKEY_P2_C == GROUP3)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?