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 }