Tool/software:
Dear TI expert,
Currently i am designing new project which is very similar with TIDA-010247, i am learning TIDA-010247, about check_signal_pattern() function, i am not understand. I do not know why use the Systick_counter variable, which is added 1 every TIMER0 interrupt. the period is 100ms.
current_counter = Systick_counter; //50ms per Counter , i do not understand this. Can you explain?
bool check_signal_pattern()
{
static int state = 0;
static uint32_t last_time = 0;
static uint32_t current_time = 0;
static uint32_t current_counter = 0;
static uint32_t last_counter = 0;
double elapsed_time = 0;
int input_level = DL_GPIO_readPins(WAKE_IN_MCU_PORT, WAKE_IN_MCU_PIN);
current_time = SysTick->VAL; //12.5ns per Tick, max 4000000
current_counter = Systick_counter; //50ms per Counter
if (current_counter == last_counter) {
elapsed_time = (double) (current_time - last_time) * 12.5 /
1000000; // convert to ms
} else if (current_counter > last_counter) {
elapsed_time = (double) (4000000 * (current_counter - last_counter) -
last_time + current_time) *
12.5 / 1000000; // convert to ms
} else {
elapsed_time =
(double) (4000000 * (1200 - last_counter + current_counter) -
last_time + current_time) *
12.5 / 1000000; // convert to ms
}
switch (state) {
case 0:
if (input_level == WAKE_IN_MCU_PIN) {
state = 1;
last_time = current_time;
last_counter = current_counter;
}
break;
case 1:
if (elapsed_time >=
DEBOUNCE_TIME) { //DEBOUNCE TIME is defined to 1ms
if (input_level == 0) {
state = 2;
last_time = current_time;
last_counter = current_counter;
} else {
state = 0;
}
}
break;
case 2:
if (elapsed_time >= DEBOUNCE_TIME) {
if (input_level == WAKE_IN_MCU_PIN) {
state = 3;
last_time = current_time;
last_counter = current_counter;
} else {
state = 0;
}
}
break;
case 3:
if (elapsed_time >= DEBOUNCE_TIME) {
if (input_level == 0) {
gWAKEINMCU = true;
state = 0;
} else {
state = 0;
}
}
break;
}
return gWAKEINMCU;
}