stm8l15x_tsl_ct_acquisition.c
来自「STM8s」· C语言 代码 · 共 1,126 行 · 第 1/3 页
C
1,126 行
, 0x02
#elif (SCKEY_P2_C == GROUP4)
, 0x03
#elif (SCKEY_P2_C == GROUP5)
, 0x04
#elif (SCKEY_P2_C == GROUP6)
, 0x05
#elif (SCKEY_P2_C == GROUP7)
, 0x06
#elif (SCKEY_P2_C == GROUP8)
, 0x07
#endif
#endif
#if SCKEY_P2_KEY_COUNT > 3
#if (SCKEY_P2_D == GROUP1)
, 0x00
#elif (SCKEY_P2_D == GROUP2)
, 0x01
#elif (SCKEY_P2_D == GROUP3)
, 0x02
#elif (SCKEY_P2_D == GROUP4)
, 0x03
#elif (SCKEY_P2_D == GROUP5)
, 0x04
#elif (SCKEY_P2_D == GROUP6)
, 0x05
#elif (SCKEY_P2_D == GROUP7)
, 0x06
#elif (SCKEY_P2_D == GROUP8)
, 0x07
#endif
#endif
#if SCKEY_P2_KEY_COUNT > 4
#if (SCKEY_P2_E == GROUP1)
, 0x00
#elif (SCKEY_P2_E == GROUP2)
, 0x01
#elif (SCKEY_P2_E == GROUP3)
, 0x02
#elif (SCKEY_P2_E == GROUP4)
, 0x03
#elif (SCKEY_P2_E == GROUP5)
, 0x04
#elif (SCKEY_P2_E == GROUP6)
, 0x05
#elif (SCKEY_P2_E == GROUP7)
, 0x06
#elif (SCKEY_P2_E == GROUP8)
, 0x07
#endif
#endif
#if SCKEY_P2_KEY_COUNT > 5
#if (SCKEY_P2_F == GROUP1)
, 0x00
#elif (SCKEY_P2_F == GROUP2)
, 0x01
#elif (SCKEY_P2_F == GROUP3)
, 0x02
#elif (SCKEY_P2_F == GROUP4)
, 0x03
#elif (SCKEY_P2_F == GROUP5)
, 0x04
#elif (SCKEY_P2_F == GROUP6)
, 0x05
#elif (SCKEY_P2_F == GROUP7)
, 0x06
#elif (SCKEY_P2_F == GROUP8)
, 0x07
#endif
#endif
#if SCKEY_P2_KEY_COUNT > 6
#if (SCKEY_P2_G == GROUP1)
, 0x00
#elif (SCKEY_P2_G == GROUP2)
, 0x01
#elif (SCKEY_P2_G == GROUP3)
, 0x02
#elif (SCKEY_P2_G == GROUP4)
, 0x03
#elif (SCKEY_P2_G == GROUP5)
, 0x04
#elif (SCKEY_P2_G == GROUP6)
, 0x05
#elif (SCKEY_P2_G == GROUP7)
, 0x06
#elif (SCKEY_P2_G == GROUP8)
, 0x07
#endif
#endif
#if SCKEY_P2_KEY_COUNT > 7
#if (SCKEY_P2_H == GROUP1)
, 0x00
#elif (SCKEY_P2_H == GROUP2)
, 0x01
#elif (SCKEY_P2_H == GROUP3)
, 0x02
#elif (SCKEY_P2_H == GROUP4)
, 0x03
#elif (SCKEY_P2_H == GROUP5)
, 0x04
#elif (SCKEY_P2_H == GROUP6)
, 0x05
#elif (SCKEY_P2_H == GROUP7)
, 0x06
#elif (SCKEY_P2_H == GROUP8)
, 0x07
#endif
#endif
};
#endif
/* Table_SCKEY_BITS contents the individual masks for the port acquisitions */
#if NUMBER_OF_SINGLE_CHANNEL_KEYS > 0
__CONST u8 Table_SCKEY_BITS[
SCKEY_P1_KEY_COUNT
#if NUMBER_OF_SINGLE_CHANNEL_PORTS > 1
+ SCKEY_P2_KEY_COUNT
#endif
#if NUMBER_OF_SINGLE_CHANNEL_PORTS > 2
+ SCKEY_P3_KEY_COUNT
#endif
] =
{
SCKEY_P1_A /* Always defined */
#if SCKEY_P1_KEY_COUNT > 1
, SCKEY_P1_B
#endif
#if SCKEY_P1_KEY_COUNT > 2
, SCKEY_P1_C
#endif
#if SCKEY_P1_KEY_COUNT > 3
, SCKEY_P1_D
#endif
#if SCKEY_P1_KEY_COUNT > 4
, SCKEY_P1_E
#endif
#if SCKEY_P1_KEY_COUNT > 5
, SCKEY_P1_F
#endif
#if SCKEY_P1_KEY_COUNT > 6
, SCKEY_P1_G
#endif
#if SCKEY_P1_KEY_COUNT > 7
, SCKEY_P1_H
#endif
#if NUMBER_OF_SINGLE_CHANNEL_PORTS > 1
, SCKEY_P2_A
#if SCKEY_P2_KEY_COUNT > 1
, SCKEY_P2_B
#endif
#if SCKEY_P2_KEY_COUNT > 2
, SCKEY_P2_C
#endif
#if SCKEY_P2_KEY_COUNT > 3
, SCKEY_P2_D
#endif
#if SCKEY_P2_KEY_COUNT > 4
, SCKEY_P2_E
#endif
#if SCKEY_P2_KEY_COUNT > 5
, SCKEY_P2_F
#endif
#if SCKEY_P2_KEY_COUNT > 6
, SCKEY_P2_G
#endif
#if SCKEY_P2_KEY_COUNT > 7
, SCKEY_P2_H
#endif
#endif
#if NUMBER_OF_SINGLE_CHANNEL_PORTS > 2
, SCKEY_P3_A
#if SCKEY_P3_KEY_COUNT > 1
, SCKEY_P3_B
#endif
#if SCKEY_P3_KEY_COUNT > 2
, SCKEY_P3_C
#endif
#if SCKEY_P3_KEY_COUNT > 3
, SCKEY_P3_D
#endif
#if SCKEY_P3_KEY_COUNT > 4
, SCKEY_P3_E
#endif
#if SCKEY_P3_KEY_COUNT > 5
, SCKEY_P3_F
#endif
#if SCKEY_P3_KEY_COUNT > 6
, SCKEY_P3_G
#endif
#if SCKEY_P3_KEY_COUNT > 7
, SCKEY_P3_H
#endif
#endif
};
#endif
#if NUMBER_OF_MULTI_CHANNEL_KEYS > 0
__CONST u16 Table_MCKEY_PORTS[
#if NUMBER_OF_MULTI_CHANNEL_KEYS == 1
CHANNEL_PER_MCKEY
#endif
#if NUMBER_OF_MULTI_CHANNEL_KEYS == 2
CHANNEL_PER_MCKEY + CHANNEL_PER_MCKEY
#endif
] =
{
MCKEY1_A_CH
, MCKEY1_B_CH
, MCKEY1_C_CH
#if CHANNEL_PER_MCKEY > 3
, MCKEY1_D_CH
, MCKEY1_E_CH
#endif
#if CHANNEL_PER_MCKEY > 5
, MCKEY1_F_CH
, MCKEY1_G_CH
, MCKEY1_H_CH
#endif
#if NUMBER_OF_MULTI_CHANNEL_KEYS > 1
, MCKEY2_A_CH
, MCKEY2_B_CH
, MCKEY2_C_CH
#if CHANNEL_PER_MCKEY > 3
, MCKEY2_D_CH
, MCKEY2_E_CH
#endif
#if CHANNEL_PER_MCKEY > 5
, MCKEY2_F_CH
, MCKEY2_G_CH
, MCKEY2_H_CH
#endif
#endif
};
#endif
#if NUMBER_OF_MULTI_CHANNEL_KEYS > 0
__CONST u8 Table_MCKEY_BITS[
#if NUMBER_OF_MULTI_CHANNEL_KEYS == 1
CHANNEL_PER_MCKEY
#elif NUMBER_OF_MULTI_CHANNEL_KEYS == 2
CHANNEL_PER_MCKEY + CHANNEL_PER_MCKEY
#endif
] =
{
MCKEY1_A
, MCKEY1_B
, MCKEY1_C
#if CHANNEL_PER_MCKEY > 3
, MCKEY1_D
, MCKEY1_E
#endif
#if CHANNEL_PER_MCKEY > 5
, MCKEY1_F
, MCKEY1_G
, MCKEY1_H
#endif
#if NUMBER_OF_MULTI_CHANNEL_KEYS > 1
, MCKEY2_A
, MCKEY2_B
, MCKEY2_C
#if CHANNEL_PER_MCKEY > 3
, MCKEY2_D
, MCKEY2_E
#endif
#if CHANNEL_PER_MCKEY > 5
, MCKEY2_F
, MCKEY2_G
, MCKEY2_H
#endif
#endif
};
#endif
#if SPREAD_SPECTRUM && SW_SPREAD_SPECTRUM
/**
******************************************************************************
* @brief Spread Spectrum waiting routine. A variable delay is
* inserted between each step.
* @par Parameters:
* None
* @retval void None
* @par Required preconditions:
* SPREAD_SPECTRUM must be defined and not null in the configuration file
* SW_SPREAD_SPECTRUM must be defined and not null in the configuration file
******************************************************************************
*/
INLINE void TSL_SW_Spread_Spectrum(void)
{
u8 i;
SpreadCounter++;
if (SpreadCounter == SPREAD_COUNTER_MAX)
{
SpreadCounter = SPREAD_COUNTER_MIN;
}
i = SpreadCounter;
while (--i);
}
#endif /* SPREAD_SPECTRUM && SW_SPREAD_SPECTRUM */
/**
******************************************************************************
* @brief Init for I/Os used in the application. Used for SW I/O toggling.
* If the hardware cell is used, the responsability of the I/O configuration is
* given to the user layer.
* @par Parameters:
* None
* @retval void None
* @par Required preconditions:
* None
******************************************************************************
*/
void TSL_IO_Init(void)
{
/*init the IO to use with the TS controller registers*/
/*Enable the TS IP clcock*/
CLK->PCKENR2 |= 0x20;
/*initialization of TS IP*/
//select which IOs will be managed by the TS IP
CCMR_P1 = SCKEY_P1_MASK;
#if NUMBER_OF_ACQUISITION_PORTS > 1
CCMR_P2 = SCKEY_P2_MASK;
#endif
CCMR_SAMP = SAMP_CAP_MASK;
//select which channel will be enabled
IOSR_P1 = SCKEY_P1_MASK;
#if NUMBER_OF_ACQUISITION_PORTS > 1
IOSR_P2 = SCKEY_P2_MASK;
#endif
IOSR_SAMP = SAMP_CAP_MASK;
#if ACTIVE_SHIELD_GROUP
ACTIVE_SHIELD_P1_PORT->DDR &= (uint8_t)(~ACTIVE_SHIELD_P1_BIT);
ACTIVE_SHIELD_P1_PORT->CR1 &= (uint8_t)(~ACTIVE_SHIELD_P1_BIT);
ACTIVE_SHIELD_P2_PORT->DDR &= (uint8_t)(~ACTIVE_SHIELD_P2_BIT);
ACTIVE_SHIELD_P2_PORT->CR1 &= (uint8_t)(~ACTIVE_SHIELD_P2_BIT);
#endif
TSL_IO_Clamp();
}
/**
******************************************************************************
* @brief Put All Sensing I/Os in ouput mode at 0.
* @par Parameters:
* None
* @retval void None
* @par Required preconditions:
* None
******************************************************************************
*/
void TSL_IO_Clamp(void)
{
//All IO in input with the analog switch OPEN
RI->IOGCR = CGCR_P1_SW_OPEN_MASK | CGCR_SAMP_SW_OPEN_MASK
#if NUMBER_OF_ACQUISITION_PORTS > 1
| CGCR_P2_SW_OPEN_MASK
#endif
;
//All IO to pushpull LOW for discharging all capacitors (Ctouch and Csense)
RI->IOGCR = CGCR_P1_PP_LOW_MASK | CGCR_SAMP_PP_LOW_MASK
#if NUMBER_OF_ACQUISITION_PORTS > 1
| CGCR_P2_PP_LOW_MASK
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?