打印
[STM8]

关于触摸库的这个TSL_Action()函数是怎样运行的?

[复制链接]
1411|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Rthena|  楼主 | 2015-7-28 12:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

/**
  ******************************************************************************
  * @brief Main function of TSL.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * Must be called from main loop to run the library state machine.
  ******************************************************************************
  */
void TSL_Action(void)
{

  switch (TSLState)
  {

    case TSL_IDLE_STATE:
      disableInterrupts();
      Local_TickFlag.b.DTO_1sec = TSL_Tick_Flags.b.DTO_1sec;
      TSL_Tick_Flags.b.DTO_1sec = 0;
      enableInterrupts();
#if NUMBER_OF_ACQUISITION_PORTS != 0  //Can only be true for RC
      TSLState = TSL_SCKEY_P1_ACQ_STATE;
      break;

    case TSL_SCKEY_P1_ACQ_STATE:
      TSL_SCKEY_P1_Acquisition();

#if NUMBER_OF_SINGLE_CHANNEL_PORTS > 0

#if (HW_ACQ_MODE != 0)                       //// HW_ACQ
      if ((HW_Acquisition_Step == READY) ||  //// HW_ACQ
                            (HW_Acquisition_Step == DONE))     //// HW_ACQ
                        {                                      //// HW_ACQ
                                TSLState = TSL_SCKEY_P1_PROC_STATE;  //// HW_ACQ
      }                                      //// HW_ACQ
#else                                        //// HW_ACQ
      TSLState = TSL_SCKEY_P1_PROC_STATE;
#endif                                       //// HW_ACQ
     
      break;
     
    case TSL_SCKEY_P1_PROC_STATE:
      for (KeyIndex = 0; KeyIndex < SCKEY_P1_KEY_COUNT; KeyIndex++)
      {
        TSL_SCKey_Process();
      }
#endif // NUMBER_OF_SINGLE_CHANNEL_PORTS > 0

#endif //NUMBER_OF_ACQUISITION_PORTS != 0

#if NUMBER_OF_ACQUISITION_PORTS > 1
      TSLState = TSL_SCKEY_P2_ACQ_STATE;
#else
#if NUMBER_OF_MULTI_CHANNEL_KEYS > 0
      TSLState = TSL_MCKEY1_ACQ_STATE;
#else
      TSLState = TSL_ECS_STATE;
#endif
#endif
      break;

#if NUMBER_OF_ACQUISITION_PORTS > 1

    case TSL_SCKEY_P2_ACQ_STATE:
      TSL_SCKEY_P2_Acquisition();
                       
#if NUMBER_OF_SINGLE_CHANNEL_PORTS > 1

#if (HW_ACQ_MODE != 0)                       //// HW_ACQ
      if ((HW_Acquisition_Step == READY) ||  //// HW_ACQ
                            (HW_Acquisition_Step == DONE))     //// HW_ACQ
                        {                                      //// HW_ACQ
                                TSLState = TSL_SCKEY_P2_PROC_STATE;  //// HW_ACQ
      }                                      //// HW_ACQ
#else                                        //// HW_ACQ
                        TSLState = TSL_SCKEY_P2_PROC_STATE;
#endif                                       //// HW_ACQ
     
                        break;
     
    case TSL_SCKEY_P2_PROC_STATE:
      for (KeyIndex = SCKEY_P1_KEY_COUNT; KeyIndex < (SCKEY_P2_KEY_COUNT + SCKEY_P1_KEY_COUNT); KeyIndex++)
      {
        TSL_SCKey_Process();
      }
                       
#endif // NUMBER_OF_SINGLE_CHANNEL_PORTS > 1

#if NUMBER_OF_ACQUISITION_PORTS > 2
      TSLState = TSL_SCKEY_P3_ACQ_STATE;
#else
#if NUMBER_OF_MULTI_CHANNEL_KEYS > 0
      TSLState = TSL_MCKEY1_ACQ_STATE;
#else
      TSLState = TSL_ECS_STATE;
#endif
#endif
      break;
#endif

#if NUMBER_OF_ACQUISITION_PORTS > 2

    case TSL_SCKEY_P3_ACQ_STATE:
      TSL_SCKEY_P3_Acquisition();
                       
#if NUMBER_OF_SINGLE_CHANNEL_PORTS > 2
     
#if (HW_ACQ_MODE != 0)                       //// HW_ACQ
      if ((HW_Acquisition_Step == READY) ||  //// HW_ACQ
                            (HW_Acquisition_Step == DONE))     //// HW_ACQ
                        {                                      //// HW_ACQ
                                TSLState = TSL_SCKEY_P3_PROC_STATE;  //// HW_ACQ
      }                                      //// HW_ACQ
#else                                        //// HW_ACQ
      TSLState = TSL_SCKEY_P3_PROC_STATE;
#endif                                       //// HW_ACQ
     
      break;
     
    case TSL_SCKEY_P3_PROC_STATE:
      for (KeyIndex = (SCKEY_P1_KEY_COUNT + SCKEY_P2_KEY_COUNT); KeyIndex < (SCKEY_P3_KEY_COUNT + SCKEY_P1_KEY_COUNT + SCKEY_P2_KEY_COUNT); KeyIndex++)
      {
        TSL_SCKey_Process();
      }
                       
#endif // NUMBER_OF_SINGLE_CHANNEL_PORTS > 2

#if NUMBER_OF_MULTI_CHANNEL_KEYS > 0
      TSLState = TSL_MCKEY1_ACQ_STATE;
#else
      TSLState = TSL_ECS_STATE;
#endif

      break;
#endif

#if NUMBER_OF_MULTI_CHANNEL_KEYS > 0

    case TSL_MCKEY1_ACQ_STATE:
                        TSL_MCKey1_Acquisition();

#if NUMBER_OF_MULTI_CHANNEL_KEYS > 1

#if (HW_ACQ_MODE != 0)                       //// HW_ACQ
      if ((HW_Acquisition_Step == READY) ||  //// HW_ACQ
                            (HW_Acquisition_Step == DONE))     //// HW_ACQ
                        {                                      //// HW_ACQ
                                TSLState = TSL_MCKEY2_ACQ_STATE;     //// HW_ACQ
      }                                      //// HW_ACQ
#else                                        //// HW_ACQ
      TSLState = TSL_MCKEY2_ACQ_STATE;
#endif                                       //// HW_ACQ

#else

#if (HW_ACQ_MODE != 0)                       //// HW_ACQ
      if ((HW_Acquisition_Step == READY) ||  //// HW_ACQ
                            (HW_Acquisition_Step == DONE))     //// HW_ACQ
                        {                                      //// HW_ACQ
                                TSLState = TSL_MCKEY_PROC_STATE;     //// HW_ACQ
      }                                      //// HW_ACQ
#else                                        //// HW_ACQ
      TSLState = TSL_MCKEY_PROC_STATE;
#endif                                       //// HW_ACQ

#endif
      break;

#if NUMBER_OF_MULTI_CHANNEL_KEYS > 1

    case TSL_MCKEY2_ACQ_STATE:
                        TSL_MCKey2_Acquisition();

#if (HW_ACQ_MODE != 0)                       //// HW_ACQ
      if ((HW_Acquisition_Step == READY) ||  //// HW_ACQ
                            (HW_Acquisition_Step == DONE))     //// HW_ACQ
                        {                                      //// HW_ACQ
                                TSLState = TSL_MCKEY_PROC_STATE;     //// HW_ACQ
      }                                      //// HW_ACQ
#else                                        //// HW_ACQ
      TSLState = TSL_MCKEY_PROC_STATE;
#endif                                       //// HW_ACQ
                       
      break;
#endif

    case TSL_MCKEY_PROC_STATE:
      for (KeyIndex = 0; KeyIndex < NUMBER_OF_MULTI_CHANNEL_KEYS; KeyIndex++)
      {
        TSL_MCKey_Process();
      }
      TSLState = TSL_ECS_STATE;
      break;
#endif

    case TSL_ECS_STATE:
      TSL_ECS();
      TSL_GlobalSetting.whole = TSL_TempGlobalSetting.whole;
      TSL_TempGlobalSetting.whole = 0;
      TSL_GlobalState.whole = TSL_TempGlobalState.whole;
      TSL_TempGlobalState.whole = 0;
      TSLState = TSL_IDLE_STATE;
      break;

    default:
      for (;;)
      {
        // Wait for Watchdog reset ...
      }
  }
}
沙发
Rthena|  楼主 | 2015-7-28 12:21 | 只看该作者
主题的框架(switch case)我知道就是内容不明白

使用特权

评论回复
板凳
amanda_s| | 2015-7-30 14:41 | 只看该作者
没看过这个代码。
不过我自己的习惯是:
1.看函数的描述
2.在一个具体的例子中去看
3.在板子上跑一跑,看看程序怎么走的
而且你要知道这个触摸的工作原理。

使用特权

评论回复
地板
Rthena|  楼主 | 2015-8-17 10:48 | 只看该作者
amanda_s 发表于 2015-7-30 14:41
没看过这个代码。
不过我自己的习惯是:
1.看函数的描述

好的,谢谢,经过一番研究我已经明白了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

11

帖子

0

粉丝