/ components / driver / test / test_sigmadelta.c
test_sigmadelta.c
 1  #include "freertos/FreeRTOS.h"
 2  #include "freertos/task.h"
 3  #include "unity.h"
 4  #include "test_utils.h"
 5  #include "soc/soc_caps.h"
 6  #include "driver/sigmadelta.h"
 7  
 8  TEST_CASE("Sigma-Delta config test", "[sigma_delta]")
 9  {
10      sigmadelta_config_t sigmadelta_cfg = {
11          .sigmadelta_prescale = 80,
12          .sigmadelta_duty = 45,
13          .sigmadelta_gpio = 4,
14      };
15      for (int i = 0; i < SOC_SIGMADELTA_CHANNEL_NUM; i++) {
16          sigmadelta_cfg.channel = i;
17          TEST_ESP_OK(sigmadelta_config(&sigmadelta_cfg));
18      }
19  
20      sigmadelta_cfg.channel = SOC_SIGMADELTA_CHANNEL_NUM;
21      TEST_ASSERT_EQUAL_MESSAGE(ESP_ERR_INVALID_ARG, sigmadelta_config(&sigmadelta_cfg), "wrong channel number should be inspected");
22  }
23  
24  // connect GPIO4 with LED positive pin, and the GND pin connect LED negative pin
25  // logic analyzer help also to see the wave form(more standard and accurate)
26  TEST_CASE("SigmaDelta pin, duty, prescale set", "[sigma_delta][ignore]")
27  {
28      sigmadelta_config_t sigmadelta_cfg = {
29          .channel = 0,
30          .sigmadelta_prescale = 80,
31          .sigmadelta_duty = 0,
32          .sigmadelta_gpio = 4,
33      };
34      TEST_ESP_OK(sigmadelta_config(&sigmadelta_cfg));
35  
36      int8_t duty = 0;
37      int inc = 1;
38      for (int i = 0; i < 1000; i++) {
39          sigmadelta_set_duty(0, duty);
40          vTaskDelay(10 / portTICK_PERIOD_MS);
41  
42          duty += inc;
43          if (duty == 127 || duty == -127) {
44              inc = (-1) * inc;
45          }
46      }
47  
48      TEST_ESP_OK(sigmadelta_set_prescale(0, 200));
49      for (int i = 0; i < 1000; i++) {
50          sigmadelta_set_duty(0, duty);
51          vTaskDelay(10 / portTICK_PERIOD_MS);
52  
53          duty += inc;
54          if (duty == 127 || duty == -127) {
55              inc = (-1) * inc;
56          }
57      }
58  
59      TEST_ESP_OK(sigmadelta_set_pin(0, 5));
60      vTaskDelay(3000 / portTICK_PERIOD_MS);
61  }