请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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;
}