亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stm8_tsl_rc_iodriver.c

?? 基于STM8 的電容按鍵算法, 方案便宜
?? C
?? 第 1 頁 / 共 2 頁
字號:
#pragma section (TSL_IO_CODE)
#endif

/**
  ******************************************************************************
  * @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)
{

  // LOADREF pin
  ((GPIO_TypeDef *)(LOADREF_PORT_ADDR))->CR1 |= LOADREF_BIT;
  ((GPIO_TypeDef *)(LOADREF_PORT_ADDR))->DDR |= LOADREF_BIT;
  ((GPIO_TypeDef *)(LOADREF_PORT_ADDR))->ODR &= (u8)(~LOADREF_BIT);

  // Single-Channel and Multi-channels pins
#if GPIOA_ELECTRODES_MASK > 0
  ((GPIO_TypeDef *)(GPIOA_BaseAddress))->CR1 |= GPIOA_ELECTRODES_MASK;
#endif
#if GPIOB_ELECTRODES_MASK > 0
  ((GPIO_TypeDef *)(GPIOB_BaseAddress))->CR1 |= GPIOB_ELECTRODES_MASK;
#endif
#if GPIOC_ELECTRODES_MASK > 0
  ((GPIO_TypeDef *)(GPIOC_BaseAddress))->CR1 |= GPIOC_ELECTRODES_MASK;
#endif
#if GPIOD_ELECTRODES_MASK > 0
  ((GPIO_TypeDef *)(GPIOD_BaseAddress))->CR1 |= GPIOD_ELECTRODES_MASK;
#endif
#if GPIOE_ELECTRODES_MASK > 0
  ((GPIO_TypeDef *)(GPIOE_BaseAddress))->CR1 |= GPIOE_ELECTRODES_MASK;
#endif
#if GPIOF_ELECTRODES_MASK > 0
  ((GPIO_TypeDef *)(GPIOF_BaseAddress))->CR1 |= GPIOF_ELECTRODES_MASK;
#endif
#if GPIOG_ELECTRODES_MASK > 0
  ((GPIO_TypeDef *)(GPIOG_BaseAddress))->CR1 |= GPIOG_ELECTRODES_MASK;
#endif
#if GPIOH_ELECTRODES_MASK > 0
  ((GPIO_TypeDef *)(GPIOH_BaseAddress))->CR1 |= GPIOH_ELECTRODES_MASK;
#endif
#if GPIOI_ELECTRODES_MASK > 0
  ((GPIO_TypeDef *)(GPIOI_BaseAddress))->CR1 |= GPIOI_ELECTRODES_MASK;
#endif

  TSL_IO_Clamp();

  /* Init Timer used to measure VIH/VIL */
  TIM3->PSCR = 0;
  TIM3->CR1 = 0x01;

}


/**
  ******************************************************************************
  * @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)
{

  // LOADREF pin
  ((GPIO_TypeDef *)(LOADREF_PORT_ADDR))->ODR &= (u8)(~LOADREF_BIT);

  // Single-Channel and Multi-channels pins
#if GPIOA_ELECTRODES_MASK > 0  
  ((GPIO_TypeDef *)(GPIOA_BaseAddress))->ODR &= (u8)(~GPIOA_ELECTRODES_MASK);
  ((GPIO_TypeDef *)(GPIOA_BaseAddress))->DDR |= GPIOA_ELECTRODES_MASK;
#endif
#if GPIOB_ELECTRODES_MASK > 0  
  ((GPIO_TypeDef *)(GPIOB_BaseAddress))->ODR &= (u8)(~GPIOB_ELECTRODES_MASK);
  ((GPIO_TypeDef *)(GPIOB_BaseAddress))->DDR |= GPIOB_ELECTRODES_MASK;
#endif
#if GPIOC_ELECTRODES_MASK > 0  
  ((GPIO_TypeDef *)(GPIOC_BaseAddress))->ODR &= (u8)(~GPIOC_ELECTRODES_MASK);
  ((GPIO_TypeDef *)(GPIOC_BaseAddress))->DDR |= GPIOC_ELECTRODES_MASK;
#endif
#if GPIOD_ELECTRODES_MASK > 0  
  ((GPIO_TypeDef *)(GPIOD_BaseAddress))->ODR &= (u8)(~GPIOD_ELECTRODES_MASK);
  ((GPIO_TypeDef *)(GPIOD_BaseAddress))->DDR |= GPIOD_ELECTRODES_MASK;
#endif
#if GPIOE_ELECTRODES_MASK > 0  
  ((GPIO_TypeDef *)(GPIOE_BaseAddress))->ODR &= (u8)(~GPIOE_ELECTRODES_MASK);
  ((GPIO_TypeDef *)(GPIOE_BaseAddress))->DDR |= GPIOE_ELECTRODES_MASK;
#endif
#if GPIOF_ELECTRODES_MASK > 0  
  ((GPIO_TypeDef *)(GPIOF_BaseAddress))->ODR &= (u8)(~GPIOF_ELECTRODES_MASK);
  ((GPIO_TypeDef *)(GPIOF_BaseAddress))->DDR |= GPIOF_ELECTRODES_MASK;
#endif
#if GPIOG_ELECTRODES_MASK > 0  
  ((GPIO_TypeDef *)(GPIOG_BaseAddress))->ODR &= (u8)(~GPIOG_ELECTRODES_MASK);
  ((GPIO_TypeDef *)(GPIOG_BaseAddress))->DDR |= GPIOG_ELECTRODES_MASK;
#endif
#if GPIOH_ELECTRODES_MASK > 0  
  ((GPIO_TypeDef *)(GPIOH_BaseAddress))->ODR &= (u8)(~GPIOH_ELECTRODES_MASK);
  ((GPIO_TypeDef *)(GPIOH_BaseAddress))->DDR |= GPIOH_ELECTRODES_MASK;
#endif
#if GPIOI_ELECTRODES_MASK > 0  
  ((GPIO_TypeDef *)(GPIOI_BaseAddress))->ODR &= (u8)(~GPIOI_ELECTRODES_MASK);
  ((GPIO_TypeDef *)(GPIOI_BaseAddress))->DDR |= GPIOI_ELECTRODES_MASK;
#endif

}


/**
  ******************************************************************************
  * @brief Local sub function to restart timer for acquisition.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  ******************************************************************************
  */
void TSL_IO_SW_Burst_Start_Timer(void)
{

  TIM3->EGR |= 0x01;

}


/**
  ******************************************************************************
  * @brief Local sub function to get timer count for acquisition.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  ******************************************************************************
  */
void TSL_IO_SW_Burst_Stop_Timer(void)
{

#asm
  ld a, _TIM3_CNTR
  ld _CounterStop, a
  ld a, _TIM3_CNTR + 1
  ld _CounterStop + 1, a
#endasm

}


/**
  ******************************************************************************
  * @brief Handles RC charge / discharge timing measurement.
  * @param[in] AcqNumber Number of times the acquisition is done.
  * @param[in] AdjustmentLevel Used to adjust the measured level.
  * @retval void None
  * @par Required preconditions:
  * None
  ******************************************************************************
  */
void TSL_IO_Acquisition(u8 AcqNumber, u8 AdjustmentLevel)
{

  u16 MaxMeasurement, MinMeasurement, CumulatedMeasurement, Measurement;
  u8 MeasRejected, RejectionCounter;
  u8 AcqLoopIndex;
  u32 tmpval;
  
  AcquisitionBitMask = sTouchIO.AcqMask;

  MinMeasurement = 0;
  MaxMeasurement = 0;
  FinalMeasurementValue = 0;
  RejectionCounter = 0;

  for ( AcqLoopIndex = 0; AcqLoopIndex < AcqNumber; AcqLoopIndex++ )
  {
   
    do
    {
     
      MeasRejected = 0;
      CumulatedMeasurement = 0;
      
      for ( SamplingShifter = SAMPLING_SHIFTER_LOOP_START;
            SamplingShifter < (SAMPLING_SHIFTER_NB_LOOPS + SAMPLING_SHIFTER_LOOP_START);
            SamplingShifter++ )
      {
        
        /* VIH measurement */
        disableInterrupts();
       
        sTouchIO.PORT_ADDR->ODR &= (u8)(~sTouchIO.DriveMask);
        sTouchIO.PORT_ADDR->DDR |= sTouchIO.DriveMask;
        sTouchIO.PORT_ADDR->CR1 &= (u8)(~sTouchIO.DriveMask);
        ((GPIO_TypeDef *) (LOADREF_PORT_ADDR))->ODR |= LOADREF_BIT;
       
        TSL_IO_SW_Burst_Start_Timer();
        sTouchIO.PORT_ADDR->DDR &= (u8)(~sTouchIO.DriveMask);
        TSL_IO_SW_Burst_TestSyncShift();
        TSL_IO_SW_Burst_Wait_Vih();
        TSL_IO_SW_Burst_Stop_Timer();
       
        enableInterrupts();
       
        Measurement = CounterStop;
       
        /* VIL measurement */
        disableInterrupts();
       
        sTouchIO.PORT_ADDR->ODR |= sTouchIO.DriveMask;
        sTouchIO.PORT_ADDR->DDR |= sTouchIO.DriveMask;
        sTouchIO.PORT_ADDR->CR1 |= sTouchIO.DriveMask;
        ((GPIO_TypeDef *) (LOADREF_PORT_ADDR))->ODR &= (u8)(~LOADREF_BIT);
       
        TSL_IO_SW_Burst_Start_Timer();
        sTouchIO.PORT_ADDR->CR1 &= (u8)(~sTouchIO.DriveMask);
        sTouchIO.PORT_ADDR->DDR &= (u8)(~sTouchIO.DriveMask);
        TSL_IO_SW_Burst_TestSyncShift();
        TSL_IO_SW_Burst_Wait_Vil();
        TSL_IO_SW_Burst_Stop_Timer();
       
        enableInterrupts();
       
        Measurement += CounterStop;
        
        CumulatedMeasurement += Measurement;
        
        /* Calculation of the min/max limits */
        if (SamplingShifter == SAMPLING_SHIFTER_LOOP_START)
        {
          tmpval = (u32)((u32)Measurement * MAX_MEAS_COEFF);
          MaxMeasurement = (u16)((u16)(tmpval >> 8) + NB_CYCLES_VIHVIL_LOOP);
          tmpval = (u32)((u32)Measurement * MIN_MEAS_COEFF);
          MinMeasurement = (u16)((u16)(tmpval >> 8) - NB_CYCLES_VIHVIL_LOOP);
        }
        else /* Compare measurement with min/max limit */
        {
          if ((Measurement < MinMeasurement) || (Measurement > MaxMeasurement))
          {
            MeasRejected++;
            RejectionCounter++;
            break; // Out from 'for SamplingShifter' loop !!!
          }
        }
        
      } /* for SamplingShifter... */
      
    }
    while (MeasRejected && (RejectionCounter <= MAX_REJECTED_MEASUREMENTS));
    
    if (MeasRejected == 0)
    {
      FinalMeasurementValue += CumulatedMeasurement;
    }
    else // RejectionCounter > MAX_REJECTED_MEASUREMENTS
    {
      break; // Out from 'for AcqLoopIndex' loop !!!
    }
    
  } /* for AcqLoopIndex... */

  disableInterrupts();

  TSL_IO_Clamp(); // To avoid consumption

  *sTouchIO.RejectedNb = RejectionCounter;

  if (RejectionCounter <= MAX_REJECTED_MEASUREMENTS)
  {
    FinalMeasurementValue = (u32)(FinalMeasurementValue >> 3); /* Division by SAMPLING_SHIFTER_NB_LOOPS */
    while ( AdjustmentLevel-- )
    {
      FinalMeasurementValue = (u32)(FinalMeasurementValue >> 1);
    }
    *sTouchIO.Measurement = (u16)FinalMeasurementValue;
  }
  else // Too many rejected measures...
  {
#if NUMBER_OF_MULTI_CHANNEL_KEYS > 0
    if (sTouchIO.Type == SCKEY_TYPE)
    {
#endif
      pKeyStruct->Setting.b.NOISE = 1; /* Warning: Application layer must reset this flag */
#if NUMBER_OF_MULTI_CHANNEL_KEYS > 0
    }
    else // MCKEY_TYPE
    {
      pMCKeyStruct->Setting.b.NOISE = 1; /* Warning: Application layer must reset this flag */
    }
#endif
  }
  
  enableInterrupts();

}

/*********************** (c) 2009 STMicroelectronics **************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡电影一区二区三区| 日韩欧美中文字幕制服| 91麻豆精品国产91久久久更新时间| 日韩一级欧美一级| 亚洲私人黄色宅男| 国产精品系列在线观看| 9191久久久久久久久久久| 国产精品第四页| 日本va欧美va精品| 精品视频在线看| 亚洲天天做日日做天天谢日日欢| 精品一区二区久久| 91精品国产综合久久福利| 亚洲在线观看免费| 91一区二区在线| 一色屋精品亚洲香蕉网站| 精彩视频一区二区三区| 欧美肥胖老妇做爰| 午夜激情综合网| 欧美日韩另类国产亚洲欧美一级| 亚洲欧洲精品一区二区三区| 国产成人免费网站| 久久久噜噜噜久噜久久综合| 久久精品国产99久久6| 欧美丰满少妇xxxxx高潮对白| 亚洲一区在线视频观看| 在线精品视频一区二区| 一区二区三区久久| 91在线观看美女| 亚洲欧美另类综合偷拍| 91在线视频免费91| 亚洲丝袜美腿综合| 在线免费不卡电影| 午夜精品久久久久久久99水蜜桃| 欧美日韩精品是欧美日韩精品| 亚洲一区二区三区三| 欧美三区在线视频| 亚洲v日本v欧美v久久精品| 欧美亚洲国产一区在线观看网站 | 99视频一区二区三区| 欧美激情中文字幕| 99免费精品视频| 一区二区三区不卡视频| 欧美另类高清zo欧美| 三级在线观看一区二区| 日韩三级中文字幕| 九九九精品视频| 国产精品久久久久久久久免费樱桃| 成人中文字幕在线| 亚洲精品伦理在线| 91精品国产免费| 久久成人av少妇免费| 久久久久97国产精华液好用吗| 成人免费高清视频| 一区二区三区国产精华| 制服丝袜亚洲网站| 成人综合激情网| 亚洲国产欧美日韩另类综合| 欧美一级免费观看| 成人一级视频在线观看| 亚洲综合在线电影| 7777精品久久久大香线蕉| 久久精品国内一区二区三区| 亚洲国产精品ⅴa在线观看| 色综合久久九月婷婷色综合| 日韩综合在线视频| 中文字幕不卡在线播放| 欧美性一级生活| 国产电影精品久久禁18| 亚洲最色的网站| 2020国产成人综合网| 一本久久a久久精品亚洲| 激情小说欧美图片| 亚洲国产精品一区二区www| 久久久三级国产网站| 欧美群妇大交群中文字幕| 国产精品18久久久久| 亚洲电影欧美电影有声小说| 中文字幕av一区二区三区高| 欧美人成免费网站| 91老司机福利 在线| 精品亚洲成a人在线观看| 一区二区三区 在线观看视频 | 精品亚洲国产成人av制服丝袜| 欧美一级免费观看| 色狠狠一区二区| 久久久国产精品午夜一区ai换脸| 成人欧美一区二区三区黑人麻豆| 69堂亚洲精品首页| 色香蕉成人二区免费| 国产精品一区二区三区网站| 日韩中文字幕区一区有砖一区| 国产精品素人一区二区| 日韩欧美电影一区| 精品视频一区二区不卡| 91亚洲精华国产精华精华液| 韩国在线一区二区| 久久精品国产网站| 天天操天天干天天综合网| 亚洲欧美一区二区三区久本道91| 国产精品久久久久婷婷二区次| 欧美精品一区二区三区蜜桃视频 | 美美哒免费高清在线观看视频一区二区 | 国产色婷婷亚洲99精品小说| 56国语精品自产拍在线观看| 日本道精品一区二区三区| kk眼镜猥琐国模调教系列一区二区| 久久精品国产99国产精品| 免费看欧美美女黄的网站| 天天综合色天天| 日韩二区三区四区| 日韩电影免费在线观看网站| 亚洲成人av一区二区| 一区二区国产盗摄色噜噜| 亚洲精品第一国产综合野| 国产精品国产a级| 亚洲人成影院在线观看| 亚洲精品国产成人久久av盗摄| 亚洲视频一区二区免费在线观看| 国产精品免费看片| 日韩码欧中文字| 亚洲一二三四在线观看| 午夜精品免费在线观看| 日韩av不卡一区二区| 日韩成人精品在线观看| 麻豆久久久久久久| 国产精品一品二品| 成人综合婷婷国产精品久久蜜臀 | 成人午夜av在线| av在线免费不卡| 在线观看91视频| 欧美一区二区视频在线观看2022| 91精品国产综合久久婷婷香蕉| 日韩一区二区三免费高清| 久久九九国产精品| 综合亚洲深深色噜噜狠狠网站| 亚洲在线视频免费观看| 奇米色777欧美一区二区| 国产一区二区免费视频| 成人av电影在线网| 欧美剧情片在线观看| wwww国产精品欧美| 亚洲精品一二三| 美女www一区二区| 风间由美中文字幕在线看视频国产欧美| 成人国产电影网| 欧美三级蜜桃2在线观看| 日韩精品一区二区三区蜜臀 | 亚洲成人动漫在线免费观看| 免费观看久久久4p| a亚洲天堂av| 91精品国产综合久久久蜜臀图片| 久久精品欧美日韩精品| 亚洲永久精品大片| 国产精品亚洲第一| 欧美三级三级三级| 日本一区二区三区视频视频| 亚洲国产一区视频| 盗摄精品av一区二区三区| 欧美精品 国产精品| 17c精品麻豆一区二区免费| 日本欧美一区二区在线观看| 91美女片黄在线| 久久你懂得1024| 三级成人在线视频| 91麻豆福利精品推荐| 国产欧美一区二区三区网站 | 91久久线看在观草草青青| 91麻豆精品国产综合久久久久久 | 色综合天天综合网天天狠天天 | 91精品国产免费| 一区二区三区日韩在线观看| 国内精品久久久久影院薰衣草 | 欧美日韩中文国产| 国产精品国产三级国产有无不卡 | 国产不卡视频在线播放| 欧美一区二区三级| 亚洲国产乱码最新视频| 91色porny蝌蚪| 中文字幕第一页久久| 极品少妇一区二区| 91精品国产91热久久久做人人| 亚洲精品国产无套在线观| 成人一区二区三区中文字幕| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 91美女视频网站| 国产精品网曝门| 国产69精品久久777的优势| 久久久久久亚洲综合| 狠狠狠色丁香婷婷综合激情| 欧美一区二区三区影视| 三级久久三级久久| 欧美一区二区三区小说| 粉嫩aⅴ一区二区三区四区五区| 欧美tickling挠脚心丨vk| 蜜臀a∨国产成人精品| 91精品免费观看| 久久成人久久鬼色| wwwwww.欧美系列| 国产馆精品极品|