123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- /***********************************************************************
- * Filename : HAL_TKEY.h
- * Description : HAL TKEY driver header file
- * Author(s) : Xiao Han
- * version : V1.0
- * Modify date : 2020-04-13
- ***********************************************************************/
- #ifndef __HAL_TKEY_H__
- #define __HAL_TKEY_H__
- #include "ACM32Fxx_HAL.h"
- /**************** Bit definition for TKEY_ISR register **************************/
- #define TKEY_ISR_CHNUM_POS (8U)
- #define TKEY_ISR_CHNUM_MASK (BIT11|BIT10|BIT9|BIT8)
- #define TKEY_ISR_CHNUM(x) (x << TKEY_ISR_CHNUM_POS)
- #define TKEY_ISR_BUSY (BIT3)
- #define TKEY_ISR_TIMEOUT (BIT2)
- #define TKEY_ISR_WAKEUP (BIT1)
- #define TKEY_ISR_EOC (BIT0)
- /**************** Bit definition for TKEY_IER register **************************/
- #define TKEY_IER_TIMEOUTIE (BIT2)
- #define TKEY_IER_WAKEUPIE (BIT1)
- #define TKEY_IER_EOCIE (BIT0)
- /**************** Bit definition for TKEY_CR register **************************/
- #define TKEY_CR_RANDM_POS (12U)
- #define TKEY_CR_RANDM_MASK (BIT13|BIT12)
- #define TKEY_CR_RANDM(x) (x << TKEY_CR_RANDM_POS)
- #define TKEY_CR_CHARGESEL (BIT11)
- #define TKEY_CR_VKEYSEL_POS (9U)
- #define TKEY_CR_VKEYSEL_MASK (BIT10|BIT9)
- #define TKEY_CR_VKEYSEL(x) (x << TKEY_CR_VKEYSEL_POS)
- #define TKEY_CR_VREFSEL_POS (7U)
- #define TKEY_CR_VREFSEL_MASK (BIT8|BIT7)
- #define TKEY_CR_VREFSEL(x) (x << TKEY_CR_VREFSEL_POS)
- #define TKEY_CR_SLEEP (BIT6)
- #define TKEY_CR_SPREAD (BIT5)
- #define TKEY_CR_CONT (BIT4)
- #define TKEY_CR_SHIELDEN (BIT3)
- #define TKEY_CR_CREN (BIT2)
- #define TKEY_CR_START (BIT1)
- #define TKEY_CR_SCAN (BIT0)
- /**************** Bit definition for TKEY_SR register **************************/
- #define TKEY_SR_VCOUT2_ORG (BIT3)
- #define TKEY_SR_VCOUT1_ORG (BIT2)
- #define TKEY_SR_VCOUT2 (BIT1)
- #define TKEY_SR_VCOUT1 (BIT0)
- /**************** Bit definition for TKEY_SMPR register **************************/
- #define TKEY_SMPR_SWT_POS (4U)
- #define TKEY_SMPR_SWT_MASK (0xFFF0U)
- #define TKEY_SMPR_SWT(x) (x << TKEY_SMPR_SWT_POS)
- #define TKEY_SMPR_CST_POS (0U)
- #define TKEY_SMPR_CST_MASK (0x000FU)
- #define TKEY_SMPR_CST(x) (x << TKEY_SMPR_CST_POS)
- /**************** Bit definition for TKEY_SOFR register **************************/
- #define TKEY_SOFR_SW1H_POS (8U)
- #define TKEY_SOFR_SW1H_MASK (0xFF00U)
- #define TKEY_SOFR_SW1H(x) (x << TKEY_SOFR_SW1H_POS)
- #define TKEY_SOFR_SW1L_POS (0U)
- #define TKEY_SOFR_SW1L_MASK (0x00FFU)
- #define TKEY_SOFR_SW1L(x) (x << TKEY_SOFR_SW1L_POS)
- typedef enum
- {
- // Calibration states
- TKEY_STATEID_CALIB = 0, /**< 0 - Object is in Calibration */
- // Release states
- TKEY_STATEID_RELEASE = 1, /**< 1 - Object is released */
- // Detect states
- TKEY_STATEID_DETECT = 2, /**< 2 - Object is in Detect */
- //Startuo states
- TKEY_STATEID_STARTUP = 3, /**< 3 - Object is in Startup */
- } TKEY_StateId_enum_T;
- typedef enum
- {
- TKEY_CRSELECT_DISABLE = 0, /**< 0 - Object is in Calibration */
- TKEY_CRSELECT_ENABLE = 1, /**< 1 - Object is in Debounce Calibration */
- } TKEY_CRSELECT_enum_T;
- /**
- * @brief TKEY Configuration Structure definition
- */
- typedef struct
- {
- uint8_t VkeySel;
- uint8_t VrefSel;
- uint8_t ShieldEn;
- uint16_t ScanWaitTime;
- uint8_t CsDisChargeTime;
- uint8_t Sw1H;
- uint8_t Sw1L;
- }TKEY_InitTypeDef;
- /**
- * @brief TKEY Configuration Structure definition
- */
- typedef struct
- {
- uint16_t RefDelta; /*!< Use a standard finger to get this value at the Development state*/
- uint16_t DetectInTH; /*!< The threshold when the state from release to detect*/
- uint16_t DetectOutTH; /*!< The threshold when the state from detect to release*/
- uint16_t CalibratTH; /*!< The threshold when need to calibration*/
- uint16_t DebIn; /*!< The filter counter for debounce when the state from release to detect*/
- uint16_t DebOut; /*!< The filter counter for debounce when the state from detect to release*/
- TKEY_CRSELECT_enum_T CrSelect; /*!< If the channel need compensation, set the CrSelect TKEY_CRSELECT_ENABLE*/
- }TKEY_ParaDef;
- typedef struct
- {
- uint8_t ReferenceFlag; /*!< If need to get the reference data */
- uint32_t RefData; /*!< The reference data */
- uint32_t Data; /*!< The current data */
- int16_t Delta; /*!< The delta value */
- uint16_t DebIn; /*!< The variate value for debounce*/
- uint16_t DebOut; /*!< The variate value for debounce*/
- TKEY_StateId_enum_T StateId; /*!< The state machine ID*/
- }TKEY_DataDef;
- typedef struct
- {
- TKEY_ParaDef *Tkey_RefPara;
- TKEY_DataDef *Tkey_Data; /*!< */
- uint16_t ChannelId;
- }TKEY_ChannelDataDef;
- typedef struct
- {
- __IO uint32_t DetectingTimeout; //Up to this times, will detecting keys.
- __IO uint32_t CalibratTimeout; //Up to this times, means the environment be changed,need calibrate.
- __IO float DetectInThRatio; //The ratio between detect in threshold and the Reference Delta RefDelta.
- __IO float DetectOutThRatio; //The ratio between detect out threshold and the Reference Delta RefDelta.
- __IO float CalibratThRatio; //The ratio between calibrate threshold and the Reference Delta RefDelta.
- __IO float WakeUpThRatio; //The ratio between wakeup threshold and the Reference Delta RefDelta.
- __IO uint16_t SleepScanWaitTime; //The Sleep mode scan wait time, Slow down the scan speed.
- }TKEY_ScanParaDef;
- /**
- * @brief ADC handle Structure definition
- */
- typedef struct
- {
- TKEY_TypeDef *Instance; /*!< Register base address */
- const TKEY_ChannelDataDef *ChannelData; /*!< The channel data point*/
- TKEY_InitTypeDef Init; /*!< TKEY init parameters */
- TKEY_ScanParaDef ScanPara; /*!< TKEY Scan parameters */
- uint32_t NrData; /*!< TKEY Cr counter data*/
- uint16_t ChannelDetecting; /*!< TKEY detecting before release*/
- uint16_t ChannelDetected; /*!< TKEY detected*/
- uint16_t ChannelValue; /*!< TKEY Value*/
- uint16_t ChannelDetectedNum; /*!< TKEY detected channel number*/
- uint8_t TotalChannelNum; /*!< TKEY toatal channel number*/
- uint32_t ScanTimer; /*!< TKEY scan Timer*/
- uint8_t CalFlag; /*!< TKEY If need to calibration */
- } TKEY_HandleTypeDef;
- #define TKEY_CHANNEL_0 (0U)
- #define TKEY_CHANNEL_1 (1U)
- #define TKEY_CHANNEL_2 (2U)
- #define TKEY_CHANNEL_3 (3U)
- #define TKEY_CHANNEL_4 (4U)
- #define TKEY_CHANNEL_5 (5U)
- #define TKEY_CHANNEL_6 (6U)
- #define TKEY_CHANNEL_7 (7U)
- #define TKEY_CHANNEL_8 (8U)
- #define TKEY_CHANNEL_9 (9U)
- #define TKEY_CHANNEL_10 (10U)
- #define TKEY_CHANNEL_11 (11U)
- #define TKEY_CHANNEL_12 (12U)
- #define TKEY_CHANNEL_13 (13U)
- #define TKEY_CHANNEL_14 (14U)
- #define TKEY_CHANNEL_15 (15U)
- #define TKEY_CR_CHARGESEL_OPA (0U)
- #define TKEY_CR_CHARGESEL_LDO (1U)
- #define TKEY_CR_VKEYSEL_1V2 (0U)
- #define TKEY_CR_VKEYSEL_2V0 (1U)
- #define TKEY_CR_VKEYSEL_2V5 (2U)
- #define TKEY_CR_VKEYSEL_3V0 (3U)
- #define TKEY_CR_VREFSEL_0V6 (0U)
- #define TKEY_CR_VREFSEL_1V0 (1U)
- #define TKEY_CR_VREFSEL_1V5 (2U)
- #define TKEY_CR_VREFSEL_2V0 (3U)
- #define TKEY_CR_SPREAD_DISABLE (0U)
- #define TKEY_CR_SPREAD_ENABLE (1U)
- #define TKEY_CR_CONT_DISABLE (0U)
- #define TKEY_CR_CONT_ENABLE (1U)
- #define TKEY_CR_SHIELDEN_DISABLE (0U)
- #define TKEY_CR_SHIELDEN_ENABLE (1U)
- #define TKEY_CR_CREN_CX (0U)
- #define TKEY_CR_CREN_CR (1U)
- #define TKEY_CR_SCAN_DISABLE (0U)
- #define TKEY_CR_SCAN_ENABLE (1U)
- #define TKEY_SOFR_RANDM_1 (0U)
- #define TKEY_SOFR_RANDM_12 (1U)
- #define TKEY_SOFR_RANDM_123 (2U)
- #define TKEY_SOFR_RANDM_1234 (3U)
- /******************************** ADC Instances *******************************/
- #define IS_TKEY_ALL_INSTANCE(INSTANCE) ((INSTANCE) == TKEY)
- #define IS_TKEY_ALL_CHARGESEL(CHARGESEL) (((CHARGESEL) == TKEY_CR_CHARGESEL_OPA) || \
- ((CHARGESEL) == TKEY_CR_CHARGESEL_LDO))
- #define IS_TKEY_ALL_VKEYSEL(VKEYSEL) (((VKEYSEL) == TKEY_CR_VKEYSEL_1V2) || \
- ((VKEYSEL) == TKEY_CR_VKEYSEL_2V0) || \
- ((VKEYSEL) == TKEY_CR_VKEYSEL_2V5) || \
- ((VKEYSEL) == TKEY_CR_VKEYSEL_3V0))
- #define IS_TKEY_ALL_VREFSEL(VREFSEL) (((VREFSEL) == TKEY_CR_VREFSEL_0V6) || \
- ((VREFSEL) == TKEY_CR_VREFSEL_1V0) || \
- ((VREFSEL) == TKEY_CR_VREFSEL_1V5) || \
- ((VREFSEL) == TKEY_CR_VREFSEL_2V0))
- #define IS_TKEY_ALL_SPREAD(SPREAD) (((SPREAD) == TKEY_CR_SPREAD_DISABLE) || \
- ((SPREAD) == TKEY_CR_SPREAD_ENABLE))
- #define IS_TKEY_ALL_SCANCONT(SCANCONT) (((SCANCONT) == TKEY_CR_CONT_DISABLE) || \
- ((SCANCONT) == TKEY_CR_CONT_ENABLE))
- #define IS_TKEY_ALL_SHIELDEN(SHIELDEN) (((SHIELDEN) == TKEY_CR_SHIELDEN_DISABLE) || \
- ((SHIELDEN) == TKEY_CR_SHIELDEN_ENABLE))
- #define IS_TKEY_ALL_JITTERRANDM(JITTERRANDM) (((JITTERRANDM) == TKEY_SOFR_RANDM_1) || \
- ((JITTERRANDM) == TKEY_SOFR_RANDM_12) || \
- ((JITTERRANDM) == TKEY_SOFR_RANDM_123) || \
- ((JITTERRANDM) == TKEY_SOFR_RANDM_1234))
- #define IS_TKEY_ALL_SCANWAITTIME(SCANWAITTIME) ((SCANWAITTIME) <= 0x0FFF)
- #define IS_TKEY_ALL_CSDISCHARGETIME(CSDISCHARGETIME) ((CSDISCHARGETIME) <= 0x0F)
- #define IS_TKEY_ALL_SW1(_SW1) ((_SW1) <= 0xFF)
- /***************** TKEY Function definition *************************/
- HAL_StatusTypeDef HAL_TKEY_Init(TKEY_HandleTypeDef* htkey);
- HAL_StatusTypeDef HAL_TKEY_Start(TKEY_HandleTypeDef* htkey);
- HAL_StatusTypeDef HAL_TKEY_Stop(TKEY_HandleTypeDef* htkey);
- HAL_StatusTypeDef HAL_TKEY_ReadNr(TKEY_HandleTypeDef* htkey);
- HAL_StatusTypeDef HAL_TKEY_ReadChannelData(TKEY_HandleTypeDef* htkey);
- HAL_StatusTypeDef HAL_TKEY_ReadAllNx(TKEY_HandleTypeDef* htkey);
- HAL_StatusTypeDef HAL_TKEY_Suspend(TKEY_HandleTypeDef* htkey);
- HAL_StatusTypeDef HAL_TKEY_Resume(TKEY_HandleTypeDef* htkey);
- void HAL_TKEY_DetectProcess(TKEY_HandleTypeDef* htkey);
- void HAL_TKEY_Calibrate_RefData(TKEY_HandleTypeDef* htkey, uint8_t CalTimes);
- #endif
|