This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TIDA-010247:关于 void CHECK_SIGNAL_PATTERN ()

Guru**** 2524550 points
Other Parts Discussed in Thread: TIDA-010247

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/simulation-hardware-system-design-tools-group/sim-hw-system-design/f/simulation-hardware-system-design-tools-forum/1559868/tida-010247-about-void-check_signal_pattern

器件型号:TIDA-010247


工具/软件:

尊敬的 TI 专家:

目前我正在设计与 TIDA-010247 非常相似的新工程、我在学习 TIDA-010247、了解了 check_signal_pattern () 函数、我不明白。 我不知道为什么使用 SysTick 计数器变量、该变量在每个 TIMER0 中断时添加 1。 周期为 100ms。

current_counter = SysTick 计数器; //50ms 每个计数器、 我不理解这一点。 您能解释一下吗?
bool check_signal_pattern()
  静态 int 状态         = 0
  静态 uint32_t last_time   = 0
  静态 uint32_t CURRENT_TIME  = 0
  静态 uint32_t current_counter = 0
  静态 uint32_t last_counter  = 0

  Double elaped_time = 0
  INT INPUT_LEVEL  = DL_GPIO_readPins (WAKE_IN_MCU_PORT、WAKE_IN_MCU_PIN);

  CURRENT_TIME  = SysTick -> VAL  //12.5ns per tick、最大 4000000
  CURRENT_COUNTER = SysTick; 每个计数器//50ms

  if (current_counter ==Last_counter){
    elapsed_time =(double)(CURRENT_TIME - Last_time)* 12.5 /
            1000000 //转换为 ms
  } else if (current_counter > Last_counter){
    elaps_counter =(双精度型)(4000000 *(current_counter - last_counter)-
                 Last_time + CURRENT_TIME)*
            12.5 / 1000000 //转换为 ms
  }其他{
    elapsed_time =
      (双精度型)(4000000 *(1200 - Last_counter + current_counter)-
           Last_time + CURRENT_TIME)*
      12.5 / 1000000 //转换为 ms
  }

  开关(状态){
    用例 0
      if (INPUT_LEVEL == WAKE_IN_MCU_PIN){
        状态    = 1
        Last_time  = CURRENT_TIME;
        Last_counter = current_counter;
      }
      休息
    用例 1
      if (elapsed_time >=
        debount_time){ //去抖时间定义为 1ms
        如果 (INPUT_LEVEL = 0){
          状态    = 2
          Last_time  = CURRENT_TIME;
          Last_counter = current_counter;
        }其他{
          状态= 0
        }
      }

      休息
    用例 2
      如果 (elapsed_time >= debount_time){
        if (INPUT_LEVEL == WAKE_IN_MCU_PIN){
          状态    = 3
          Last_time  = CURRENT_TIME;
          Last_counter = current_counter;
        }其他{
          状态= 0
        }
      }
      休息
    情形 3
      如果 (elapsed_time >= debount_time){
        如果 (INPUT_LEVEL = 0){
          gWAKEINMCU = true
          状态   = 0
        }其他{
          状态= 0
        }
      }
      休息
  }

  返回 gWAKEINMCU
}