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>&copy; 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 + -
显示快捷键?