embox
1/**
2* @file
3* @brief Test for extended sleep. It enters extended sleep,
4* then exits on timer trigger and blinks LED.
5*
6* @date 07.10.2020
7* @author Alexander Kalmuk
8*/
9
10#include <stdio.h>11#include <unistd.h>12#include <framework/mod/options.h>13
14#include <config/custom_config_qspi.h>15#include <hw_gpio.h>16
17#define LOOP_CNT OPTION_GET(NUMBER, loop_cnt)18#define SLEEP_SEC OPTION_GET(NUMBER, sleep_sec)19
20/* LED configuration section */
21#define LED1_PORT (HW_GPIO_PORT_1)22#define LED1_PIN (HW_GPIO_PIN_1)23#define LED1_MODE (HW_GPIO_MODE_OUTPUT)24#define LED1_FUNC (HW_GPIO_FUNC_GPIO)25
26static void busy_loop(unsigned volatile n) {27while (n--) {28
29}30}
31
32static void toggle_led(int led_is_on) {33if (led_is_on) {34HW_GPIO_SET_PIN_FUNCTION(LED1);35hw_gpio_set_active(LED1_PORT, LED1_PIN);36HW_GPIO_PAD_LATCH_ENABLE(LED1);37HW_GPIO_PAD_LATCH_DISABLE(LED1);38} else {39HW_GPIO_SET_PIN_FUNCTION(LED1);40hw_gpio_set_inactive(LED1_PORT, LED1_PIN);41HW_GPIO_PAD_LATCH_ENABLE(LED1);42HW_GPIO_PAD_LATCH_DISABLE(LED1);43}44}
45
46static void deepsleep_test(void) {47int led;48int cnt;49
50led = 1;51toggle_led(led);52busy_loop(1 * 1000000);53led ^= 1;54toggle_led(led);55
56for (cnt = 0; cnt < LOOP_CNT; cnt++) {57usleep(SLEEP_SEC * USEC_PER_SEC);58
59led ^= 1;60toggle_led(led);61}62}
63
64int main(int argc, char **argv) {65deepsleep_test();66
67return 0;68}
69