stm8l10x_tsl_ct_acquisition.c

来自「STM8s」· C语言 代码 · 共 2,078 行 · 第 1/4 页

C
2,078
字号
/**
  ******************************************************************************
  * @file    stm8l10x_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 STM8L10x 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 "stm8l10x_tsl_ct_acquisition.h"
#include "stm8_tsl_services.h"

#if defined(CHARGE_TRANSFER) && defined(STM8L10X)
/* This file is use only with the STM8L10x product */

/* ---------------    SECTION DEFINITION FOR THIS FILE   ---------------------*/
#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

#if SPREAD_SPECTRUM
static u8 SpreadCounter;

u8 Previous_calibration_value;
#endif


/*define the SAMPLING capacitor comparator channel mask*/
#if   (SAMP_CAP_CH == CH1)
/*define the sampling capacitor port*/
#define SAMP_CAP_PORT       (GPIOB)
#define SAMP_CAP_IO_MASK_1  (0x01) /*PB0*/
#define SAMP_CAP_IO_MASK_2  (0x04) /*PB2*/
/*both comparators are used*/
#if defined(COMP1) && defined(COMP2)
#define SAMP_CAP_COMP_MASK (0x11)
#define SAMP_CAP_IO_MASK   (0x05) /*PB2 and PB0*/
#elif defined(COMP1)
/*only the comparator 1 is used*/
#define SAMP_CAP_COMP_MASK (0x01)
#define SAMP_CAP_IO_MASK   (0x01) /*PB0*/
#elif defined(COMP2)
/*only the comparator 2 is used*/
#define SAMP_CAP_COMP_MASK (0x10)
#define SAMP_CAP_IO_MASK   (0x04) /*PB2*/
#else
#error "COMPARATOR definition wrong"
#endif

#elif (SAMP_CAP_CH == CH2)
#define SAMP_CAP_PORT       (GPIOB)
#define SAMP_CAP_IO_MASK_1  (0x02) /*PB1*/
#define SAMP_CAP_IO_MASK_2  (0x08) /*PB3*/
/*both comparators are used*/
#if defined(COMP1) && defined(COMP2)
#define SAMP_CAP_COMP_MASK (0x22)
#define SAMP_CAP_IO_MASK   (0x0A) /*PB3 and PB1*/
#elif defined(COMP1)
/*only the comparator 1 is used*/
#define SAMP_CAP_COMP_MASK (0x02)
#define SAMP_CAP_IO_MASK   (0x02) /*PB1*/
#elif defined(COMP2)
/*only the comparator 2 is used*/
#define SAMP_CAP_COMP_MASK (0x20)
#define SAMP_CAP_IO_MASK   (0x08) /*PB3*/
#else
#error "COMPARATOR definition wrong"
#endif

#elif (SAMP_CAP_CH == CH3)
#define SAMP_CAP_PORT       (GPIOD)
#define SAMP_CAP_IO_MASK_1  (0x01) /*PD0*/
#define SAMP_CAP_IO_MASK_2  (0x04) /*PD2*/
/*both comparators are used*/
#if defined(COMP1) && defined(COMP2)
#define SAMP_CAP_COMP_MASK (0x44)
#define SAMP_CAP_IO_MASK   (0x05) /*PD2 and PD0*/
#elif defined(COMP1)
/*only the comparator 1 is used*/
#define SAMP_CAP_COMP_MASK (0x04)
#define SAMP_CAP_IO_MASK   (0x01) /*PD0*/
#elif defined(COMP2)
/*only the comparator 2 is used*/
#define SAMP_CAP_COMP_MASK (0x40)
#define SAMP_CAP_IO_MASK   (0x04) /*PD2*/
#else
#error "COMPARATOR definition wrong"
#endif

#elif (SAMP_CAP_CH == CH4)
#define SAMP_CAP_PORT       (GPIOD)
#define SAMP_CAP_IO_MASK_1  (0x02) /*PD1*/
#define SAMP_CAP_IO_MASK_2  (0x08) /*PD3*/
/*both comparators are used*/
#if defined(COMP1) && defined(COMP2)
#define SAMP_CAP_COMP_MASK (0x88)
#define SAMP_CAP_IO_MASK   (0x0A) /*PD3 and PD1*/
#elif defined(COMP1)
/*only the comparator 1 is used*/
#define SAMP_CAP_COMP_MASK (0x08)
#define SAMP_CAP_IO_MASK   (0x02) /*PD1*/
#elif defined(COMP2)
/*only the comparator 2 is used*/
#define SAMP_CAP_COMP_MASK (0x80)
#define SAMP_CAP_IO_MASK   (0x08) /*PD3*/
#else
#error "COMPARATOR definition wrong"
#endif

#endif

/*define the PORT1 comparator channel mask*/
#if   ((SCKEY_P1_CH == CH1) || MKEY_CH1_MASK)
#define P1_PORT        (GPIOB)
#define P1_IO_MASK_1   (0x01) /*PB0*/
#define P1_IO_MASK_2   (0x04) /*PB2*/
#if (SCKEY_P1_CH == CH1)
#if ((SCKEY_P1_A == GROUP1) && (SCKEY_P1_B == GROUP2)) || ((SCKEY_P1_A == GROUP2) && (SCKEY_P1_B == GROUP1))
#define SCKEY_P1_COMP_MASK  (0x11)
#define SCKEY_P1_IO_MASK    (0x05) /*PB2 and PB0*/
#define SCKEY_P1_STATE_MASK (0x03)
#elif (SCKEY_P1_A == GROUP1) || (SCKEY_P1_B == GROUP1)
#define SCKEY_P1_COMP_MASK  (0x01)
#define SCKEY_P1_IO_MASK    (0x01) /*PB0*/
#define SCKEY_P1_STATE_MASK (0x01)
#elif (SCKEY_P1_A == GROUP2) || (SCKEY_P1_B == GROUP2)
#define SCKEY_P1_COMP_MASK  (0x10)
#define SCKEY_P1_IO_MASK    (0x04) /*PB2*/
#define SCKEY_P1_STATE_MASK (0x02)
#else
#define SCKEY_P1_COMP_MASK  (0x00)
#define SCKEY_P1_IO_MASK    (0x00)
#define SCKEY_P1_STATE_MASK (0x00)
#endif
#else
#define SCKEY_P1_COMP_MASK  (0x00)
#define SCKEY_P1_IO_MASK    (0x00)
#define SCKEY_P1_STATE_MASK (0x00)
#endif // end of #if (SCKEY_P1_CH == CH1)
/*Multi channel key*/
#if (MKEY_CH1_MASK == (GROUP1|GROUP2))
#define MCKEY_P1_COMP_MASK  (0x11)
#define MCKEY_P1_IO_MASK    (0x05) /*PB0 and PB2*/
#define MCKEY_P1_STATE_MASK (0x03)
#elif MKEY_CH1_MASK == GROUP1
#define MCKEY_P1_COMP_MASK  (0x01)
#define MCKEY_P1_IO_MASK    (0x01) /*PB0*/
#define MCKEY_P1_STATE_MASK (0x01)
#elif MKEY_CH1_MASK == GROUP2
#define MCKEY_P1_COMP_MASK  (0x10)
#define MCKEY_P1_IO_MASK    (0x04)/*PB2*/
#define MCKEY_P1_STATE_MASK (0x02)
#else
#define MCKEY_P1_COMP_MASK  (0x00)
#define MCKEY_P1_IO_MASK    (0x00)
#define MCKEY_P1_STATE_MASK (0x00)
#endif

#if ACTIVE_SHIELD_GROUP == GROUP1
#define ASHLD_P1_COMP_MASK  (0x01)
#define ASHLD_P1_IO_MASK    (0x01) /*PB0*/
#define ASHLD_P1_STATE_MASK (0x01)
#elif ACTIVE_SHIELD_GROUP == GROUP2
#define ASHLD_P1_COMP_MASK  (0x10)
#define ASHLD_P1_IO_MASK    (0x04) /*PB2*/
#define ASHLD_P1_STATE_MASK (0x02)
#else
#define ASHLD_P1_COMP_MASK  (0x00)
#define ASHLD_P1_IO_MASK    (0x00)
#define ASHLD_P1_STATE_MASK (0x00)
#endif

#define P1_COMP_MASK  (SCKEY_P1_COMP_MASK | MCKEY_P1_COMP_MASK | ASHLD_P1_COMP_MASK)
#define P1_IO_MASK    (SCKEY_P1_IO_MASK | MCKEY_P1_IO_MASK | ASHLD_P1_IO_MASK)
#define P1_STATE_MASK (SCKEY_P1_STATE_MASK | MCKEY_P1_STATE_MASK | ASHLD_P1_STATE_MASK)

#elif ((SCKEY_P1_CH == CH2) || MKEY_CH2_MASK)
#define P1_PORT        (GPIOB)
#define P1_IO_MASK_1   (0x02) /*PB1*/
#define P1_IO_MASK_2   (0x08) /*PB3*/
#if (SCKEY_P1_CH == CH2)
#if ((SCKEY_P1_A == GROUP1) && (SCKEY_P1_B == GROUP2)) || ((SCKEY_P1_A == GROUP2) && (SCKEY_P1_B == GROUP1))
#define SCKEY_P1_COMP_MASK  (0x22)
#define SCKEY_P1_IO_MASK    (0x0A) /*PB3 and PB1*/
#define SCKEY_P1_STATE_MASK (0x03)
#elif (SCKEY_P1_A == GROUP1) || (SCKEY_P1_B == GROUP1)
#define SCKEY_P1_COMP_MASK  (0x02)
#define SCKEY_P1_IO_MASK    (0x02) /*PB1*/
#define SCKEY_P1_STATE_MASK (0x01)
#elif (SCKEY_P1_A == GROUP2) || (SCKEY_P1_B == GROUP2)
#define SCKEY_P1_COMP_MASK  (0x20)
#define SCKEY_P1_IO_MASK    (0x08) /*PB3*/
#define SCKEY_P1_STATE_MASK (0x02)
#else
#define SCKEY_P1_COMP_MASK  (0x00)
#define SCKEY_P1_IO_MASK    (0x00)
#define SCKEY_P1_STATE_MASK (0x00)
#endif
#else
#define SCKEY_P1_COMP_MASK  (0x00)
#define SCKEY_P1_IO_MASK    (0x00)
#define SCKEY_P1_STATE_MASK (0x00)
#endif // end of #if (SCKEY_P1_CH == CH2)
/*Multi channel key*/
#if MKEY_CH2_MASK == (GROUP1|GROUP2)
#define MCKEY_P1_COMP_MASK  (0x22)
#define MCKEY_P1_IO_MASK    (0x0A) /*PB1 and PB3*/
#define MCKEY_P1_STATE_MASK (0x03)
#elif MKEY_CH2_MASK == GROUP1
#define MCKEY_P1_COMP_MASK  (0x02)
#define MCKEY_P1_IO_MASK    (0x02) /*PB1*/
#define MCKEY_P1_STATE_MASK (0x01)
#elif MKEY_CH2_MASK == GROUP2
#define MCKEY_P1_COMP_MASK  (0x20)
#define MCKEY_P1_IO_MASK    (0x08) /*PB3*/
#define MCKEY_P1_STATE_MASK (0x02)
#else
#define MCKEY_P1_COMP_MASK  (0x00)
#define MCKEY_P1_IO_MASK    (0x00)
#define MCKEY_P1_STATE_MASK (0x00)
#endif

#if ACTIVE_SHIELD_GROUP == GROUP1
#define ASHLD_P1_COMP_MASK  (0x02)
#define ASHLD_P1_IO_MASK    (0x02) /*PB1*/
#define ASHLD_P1_STATE_MASK (0x01)
#elif ACTIVE_SHIELD_GROUP == GROUP2
#define ASHLD_P1_COMP_MASK  (0x20)
#define ASHLD_P1_IO_MASK    (0x08) /*PB3*/
#define ASHLD_P1_STATE_MASK (0x02)
#else
#define ASHLD_P1_COMP_MASK  (0x00)
#define ASHLD_P1_IO_MASK    (0x00)
#define ASHLD_P1_STATE_MASK (0x00)
#endif
#define P1_COMP_MASK  (SCKEY_P1_COMP_MASK | MCKEY_P1_COMP_MASK | ASHLD_P1_COMP_MASK)
#define P1_IO_MASK    (SCKEY_P1_IO_MASK | MCKEY_P1_IO_MASK | ASHLD_P1_IO_MASK)
#define P1_STATE_MASK (SCKEY_P1_STATE_MASK | MCKEY_P1_STATE_MASK | ASHLD_P1_STATE_MASK)

#elif ((SCKEY_P1_CH == CH3) || MKEY_CH3_MASK)
#define P1_PORT        (GPIOD)
#define P1_IO_MASK_1   (0x01) /*PD0*/
#define P1_IO_MASK_2   (0x04) /*PD2*/
#if (SCKEY_P1_CH == CH3)
/*single channel key*/
#if ((SCKEY_P1_A == GROUP1) && (SCKEY_P1_B == GROUP2)) || ((SCKEY_P1_A == GROUP2) && (SCKEY_P1_B == GROUP1))
#define SCKEY_P1_COMP_MASK  (0x44)
#define SCKEY_P1_IO_MASK    (0x05) /*PD2 and PD0*/
#define SCKEY_P1_STATE_MASK (0x03)
#elif (SCKEY_P1_A == GROUP1) || (SCKEY_P1_B == GROUP1)
#define SCKEY_P1_COMP_MASK  (0x04)
#define SCKEY_P1_IO_MASK    (0x01) /*PD0*/
#define SCKEY_P1_STATE_MASK (0x01)
#elif (SCKEY_P1_A == GROUP2) || (SCKEY_P1_B == GROUP2)
#define SCKEY_P1_COMP_MASK  (0x40) /*PD2*/
#define SCKEY_P1_IO_MASK    (0x04)
#define SCKEY_P1_STATE_MASK (0x02)
#else
#define SCKEY_P1_COMP_MASK  (0x00)
#define SCKEY_P1_IO_MASK    (0x00)
#define SCKEY_P1_STATE_MASK (0x00)
#endif
#else
#define SCKEY_P1_COMP_MASK  (0x00)
#define SCKEY_P1_IO_MASK    (0x00)
#define SCKEY_P1_STATE_MASK (0x00)
#endif // end of #if (SCKEY_P1_CH == CH3)
/*Multi channel key*/
#if MKEY_CH3_MASK == (GROUP1|GROUP2)
#define MCKEY_P1_COMP_MASK  (0x44)
#define MCKEY_P1_IO_MASK    (0x05) /*PD2 and PD0*/
#define MCKEY_P1_STATE_MASK (0x03)
#elif MKEY_CH3_MASK == GROUP1
#define MCKEY_P1_COMP_MASK  (0x04)
#define MCKEY_P1_IO_MASK    (0x01) /*PD0*/
#define MCKEY_P1_STATE_MASK (0x01)
#elif MKEY_CH3_MASK == GROUP2
#define MCKEY_P1_COMP_MASK  (0x40) /*PD2*/
#define MCKEY_P1_IO_MASK    (0x04)
#define MCKEY_P1_STATE_MASK (0x02)
#else
#define MCKEY_P1_COMP_MASK  (0x00)
#define MCKEY_P1_IO_MASK    (0x00)
#define MCKEY_P1_STATE_MASK (0x00)
#endif

#if ACTIVE_SHIELD_GROUP == GROUP1
#define ASHLD_P1_COMP_MASK  (0x04)
#define ASHLD_P1_IO_MASK    (0x01) /*PD0*/
#define ASHLD_P1_STATE_MASK (0x01)
#elif ACTIVE_SHIELD_GROUP == GROUP2
#define ASHLD_P1_COMP_MASK  (0x40)
#define ASHLD_P1_IO_MASK    (0x04) /*PD2*/
#define ASHLD_P1_STATE_MASK (0x02)
#else
#define ASHLD_P1_COMP_MASK  (0x00)
#define ASHLD_P1_IO_MASK    (0x00)
#define ASHLD_P1_STATE_MASK (0x00)
#endif

#define P1_COMP_MASK  (SCKEY_P1_COMP_MASK | MCKEY_P1_COMP_MASK | ASHLD_P1_COMP_MASK)
#define P1_IO_MASK    (SCKEY_P1_IO_MASK | MCKEY_P1_IO_MASK | ASHLD_P1_IO_MASK)
#define P1_STATE_MASK (SCKEY_P1_STATE_MASK | MCKEY_P1_STATE_MASK | ASHLD_P1_STATE_MASK)

#elif ((SCKEY_P1_CH == CH4) || MKEY_CH4_MASK)
#define P1_PORT              (GPIOD)
#define P1_IO_MASK_1         (0x02) /*PB1*/
#define P1_IO_MASK_2         (0x08) /*PB3*/
#if (SCKEY_P1_CH == CH4)
/*Single channel key*/
#if ((SCKEY_P1_A == GROUP1) && (SCKEY_P1_B == GROUP2)) || ((SCKEY_P1_A == GROUP2) && (SCKEY_P1_B == GROUP1))
#define SCKEY_P1_COMP_MASK  (0x88)
#define SCKEY_P1_IO_MASK    (0x0A) /*PD3 and PD1*/
#define SCKEY_P1_STATE_MASK (0x03)
#elif (SCKEY_P1_A == GROUP1) || (SCKEY_P1_B == GROUP1)
#define SCKEY_P1_COMP_MASK  (0x08)
#define SCKEY_P1_IO_MASK    (0x02) /*PD1*/
#define SCKEY_P1_STATE_MASK (0x01)
#elif (SCKEY_P1_A == GROUP2) || (SCKEY_P1_B == GROUP2)
#define SCKEY_P1_COMP_MASK  (0x80) /*PD3*/
#define SCKEY_P1_IO_MASK    (0x08)
#define SCKEY_P1_STATE_MASK (0x02)
#else
#define SCKEY_P1_COMP_MASK  (0x00)
#define SCKEY_P1_IO_MASK    (0x00)
#define SCKEY_P1_STATE_MASK (0x00)
#endif
#else
#define SCKEY_P1_COMP_MASK  (0x00)
#define SCKEY_P1_IO_MASK    (0x00)
#define SCKEY_P1_STATE_MASK (0x00)
#endif // end of #if (SCKEY_P1_CH == CH4)
/*Multi channel key*/
#if MKEY_CH4_MASK == (GROUP1|GROUP2)
#define MCKEY_P1_COMP_MASK  (0x88)
#define MCKEY_P1_IO_MASK    (0x0A) /*PD3 and PD1*/
#define MCKEY_P1_STATE_MASK (0x03)
#elif MKEY_CH4_MASK == GROUP1
#define MCKEY_P1_COMP_MASK  (0x08)
#define MCKEY_P1_IO_MASK    (0x02) /*PD1*/
#define MCKEY_P1_STATE_MASK (0x01)
#elif MKEY_CH4_MASK == GROUP2
#define MCKEY_P1_COMP_MASK  (0x80) /*PD3*/
#define MCKEY_P1_IO_MASK    (0x08)
#define MCKEY_P1_STATE_MASK (0x02)
#else
#define MCKEY_P1_COMP_MASK  (0x00)
#define MCKEY_P1_IO_MASK    (0x00)
#define MCKEY_P1_STATE_MASK (0x00)
#endif

#if ACTIVE_SHIELD_GROUP == GROUP1
#define ASHLD_P1_COMP_MASK  (0x08)
#define ASHLD_P1_IO_MASK    (0x02) /*PD1*/
#define ASHLD_P1_STATE_MASK (0x01)
#elif ACTIVE_SHIELD_GROUP == GROUP2
#define ASHLD_P1_COMP_MASK  (0x80)
#define ASHLD_P1_IO_MASK    (0x08) /*PD3*/
#define ASHLD_P1_STATE_MASK (0x02)
#else
#define ASHLD_P1_COMP_MASK  (0x00)
#define ASHLD_P1_IO_MASK    (0x00)
#define ASHLD_P1_STATE_MASK (0x00)
#endif
#define P1_COMP_MASK  (SCKEY_P1_COMP_MASK | MCKEY_P1_COMP_MASK | ASHLD_P1_COMP_MASK)
#define P1_IO_MASK    (SCKEY_P1_IO_MASK | MCKEY_P1_IO_MASK | ASHLD_P1_IO_MASK)
#define P1_STATE_MASK (SCKEY_P1_STATE_MASK | MCKEY_P1_STATE_MASK | ASHLD_P1_STATE_MASK)

#else
#error "Wrong Channel selection for SCKEY_P1 or MKEY_CHn_MASK"
#endif


#if NUMBER_OF_ACQUISITION_PORTS > 1
/*define the PORT2 comparator channel mask*/
#if   ((SCKEY_P2_CH == CH1) || MKEY_CH1_MASK)
#define P2_PORT        (GPIOB)
#define P2_IO_MASK_1   (0x01) /*PB0*/
#define P2_IO_MASK_2   (0x04) /*PB2*/
#if   (SCKEY_P2_CH == CH1)
#if ((SCKEY_P2_A == GROUP1) && (SCKEY_P2_B == GROUP2)) || ((SCKEY_P2_A == GROUP2) && (SCKEY_P2_B == GROUP1))
#define SCKEY_P2_COMP_MASK  (0x11)
#define SCKEY_P2_IO_MASK    (0x05) /*PB2 and PB0*/
#define SCKEY_P2_STATE_MASK (0x03)
#elif (SCKEY_P2_A == GROUP1) || (SCKEY_P2_B == GROUP1)
#define SCKEY_P2_COMP_MASK  (0x01)
#define SCKEY_P2_IO_MASK    (0x01) /*PB0*/
#define SCKEY_P2_STATE_MASK (0x01)
#elif (SCKEY_P2_A == GROUP2) || (SCKEY_P2_B == GROUP2)
#define SCKEY_P2_COMP_MASK  (0x10)
#define SCKEY_P2_IO_MASK    (0x04) /*PB2*/
#define SCKEY_P2_STATE_MASK (0x02)
#else
#define SCKEY_P2_COMP_MASK  (0x00)
#define SCKEY_P2_IO_MASK    (0x00)
#define SCKEY_P2_STATE_MASK (0x00)
#endif
#else
#define SCKEY_P2_COMP_MASK  (0x00)
#define SCKEY_P2_IO_MASK    (0x00)
#define SCKEY_P2_STATE_MASK (0x00)
#endif // end of #if (SCKEY_P2_CH == CH1)
/*Multi channel key*/
#if MKEY_CH1_MASK == (GROUP1|GROUP2)
#define MCKEY_P2_COMP_MASK  (0x11)
#define MCKEY_P2_IO_MASK    (0x05) /*PB2 and PB0*/
#define MCKEY_P2_STATE_MASK (0x03)
#elif MKEY_CH1_MASK == GROUP1
#define MCKEY_P2_COMP_MASK  (0x01)
#define MCKEY_P2_IO_MASK    (0x01) /*PB0*/
#define MCKEY_P2_STATE_MASK (0x01)
#elif MKEY_CH1_MASK == GROUP2
#define MCKEY_P2_COMP_MASK  (0x10) /*PB2*/
#define MCKEY_P2_IO_MASK    (0x04)
#define MCKEY_P2_STATE_MASK (0x02)
#else
#define MCKEY_P2_COMP_MASK  (0x00)
#define MCKEY_P2_IO_MASK    (0x00)
#define MCKEY_P2_STATE_MASK (0x00)
#endif

#if ACTIVE_SHIELD_GROUP == GROUP1
#define ASHLD_P2_COMP_MASK  (0x01)
#define ASHLD_P2_IO_MASK    (0x01) /*PB0*/
#define ASHLD_P2_STATE_MASK (0x01)
#elif ACTIVE_SHIELD_GROUP == GROUP2
#define ASHLD_P2_COMP_MASK  (0x10)
#define ASHLD_P2_IO_MASK    (0x04) /*PB2*/
#define ASHLD_P2_STATE_MASK (0x02)
#else
#define ASHLD_P2_COMP_MASK  (0x00)
#define ASHLD_P2_IO_MASK    (0x00)
#define ASHLD_P2_STATE_MASK (0x00)
#endif

#define P2_COMP_MASK  (SCKEY_P2_COMP_MASK | MCKEY_P2_COMP_MASK | ASHLD_P2_COMP_MASK)
#define P2_IO_MASK    (SCKEY_P2_IO_MASK | MCKEY_P2_IO_MASK | ASHLD_P2_IO_MASK)
#define P2_STATE_MASK (SCKEY_P2_STATE_MASK | MCKEY_P2_STATE_MASK | ASHLD_P2_STATE_MASK)

#elif ((SCKEY_P2_CH == CH2) || MKEY_CH2_MASK)
#define P2_PORT        (GPIOB)
#define P2_IO_MASK_1   (0x02) /*PB1*/
#define P2_IO_MASK_2   (0x08) /*PB3*/
#if (SCKEY_P2_CH == CH2)
#if ((SCKEY_P2_A == GROUP1) && (SCKEY_P2_B == GROUP2)) || ((SCKEY_P2_A == GROUP2) && (SCKEY_P2_B == GROUP1))
#define SCKEY_P2_COMP_MASK  (0x22)
#define SCKEY_P2_IO_MASK    (0x0A) /*PB3 and PB1*/
#define SCKEY_P2_STATE_MASK (0x03)
#elif (SCKEY_P2_A == GROUP1) || (SCKEY_P2_B == GROUP1)
#define SCKEY_P2_COMP_MASK  (0x02)
#define SCKEY_P2_IO_MASK    (0x02) /*PB1*/
#define SCKEY_P2_STATE_MASK (0x01)
#elif (SCKEY_P2_A == GROUP2) || (SCKEY_P2_B == GROUP2)
#define SCKEY_P2_COMP_MASK  (0x20)
#define SCKEY_P2_IO_MASK    (0x08) /*PB3*/
#define SCKEY_P2_STATE_MASK (0x02)
#else
#define SCKEY_P2_COMP_MASK  (0x00)
#define SCKEY_P2_IO_MASK    (0x00)
#define SCKEY_P2_STATE_MASK (0x00)
#endif
#else
#define SCKEY_P2_COMP_MASK  (0x00)
#define SCKEY_P2_IO_MASK    (0x00)
#define SCKEY_P2_STATE_MASK (0x00)
#endif // end of #if (SCKEY_P2_CH == CH2)
/*Multi channel key*/
#if MKEY_CH2_MASK == (GROUP1|GROUP2)
#define MCKEY_P2_COMP_MASK  (0x22)
#define MCKEY_P2_IO_MASK    (0x0A) /*PB1 and PB3*/
#define MCKEY_P2_STATE_MASK (0x03)
#elif MKEY_CH2_MASK == GROUP1
#define MCKEY_P2_COMP_MASK  (0x02)
#define MCKEY_P2_IO_MASK    (0x02) /*PB1*/
#define MCKEY_P2_STATE_MASK (0x01)
#elif MKEY_CH2_MASK == GROUP2
#define MCKEY_P2_COMP_MASK  (0x20) /*PB3*/
#define MCKEY_P2_IO_MASK    (0x08)
#define MCKEY_P2_STATE_MASK (0x02)
#else
#define MCKEY_P2_COMP_MASK  (0x00)
#define MCKEY_P2_IO_MASK    (0x00)
#define MCKEY_P2_STATE_MASK (0x00)
#endif

#if ACTIVE_SHIELD_GROUP == GROUP1
#define ASHLD_P2_COMP_MASK  (0x02)
#define ASHLD_P2_IO_MASK    (0x02) /*PB1*/
#define ASHLD_P2_STATE_MASK (0x01)
#elif ACTIVE_SHIELD_GROUP == GROUP2
#define ASHLD_P2_COMP_MASK  (0x20)
#define ASHLD_P2_IO_MASK    (0x08) /*PB3*/
#define ASHLD_P2_STATE_MASK (0x02)
#else
#define ASHLD_P2_COMP_MASK  (0x00)
#define ASHLD_P2_IO_MASK    (0x00)
#define ASHLD_P2_STATE_MASK (0x00)
#endif

#define P2_COMP_MASK  (SCKEY_P2_COMP_MASK | MCKEY_P2_COMP_MASK | ASHLD_P2_COMP_MASK)
#define P2_IO_MASK    (SCKEY_P2_IO_MASK | MCKEY_P2_IO_MASK | ASHLD_P2_IO_MASK)
#define P2_STATE_MASK (SCKEY_P2_STATE_MASK | MCKEY_P2_STATE_MASK | ASHLD_P2_STATE_MASK)

#elif ((SCKEY_P2_CH == CH3) || MKEY_CH3_MASK)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?