linux-embedded-examples/pwm/pwm.c
Sanchayan Maity 5b6fdce273 Add PWM demo code
Add PWM demo code. We use libsoc for handling PWM.
2017-04-13 16:48:06 +05:30

62 lines
1.3 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <stdint.h>
#include <stdbool.h>
#include <libsoc_pwm.h>
/*
* libsoc PWM API Documentation: https://jackmitch.github.io/libsoc/c/pwm/
*/
int main(void)
{
pwm* vf_pwm = NULL;
uint32_t ret = EXIT_SUCCESS;
uint32_t pwm_period = 0;
uint32_t pwm_duty_cycle = 0;
vf_pwm = libsoc_pwm_request(0, 0, LS_WEAK);
if (vf_pwm == NULL) {
perror("PWM request failed");
return EXIT_FAILURE;
}
printf("Enter PWM Period:\t");
scanf("%d", &pwm_period);
ret = libsoc_pwm_set_period(vf_pwm, pwm_period);
if (ret == EXIT_FAILURE) {
perror("PWM set period failed");
goto exit_failure;
}
printf("Enter PWM Duty Cycle:\t");
scanf("%d", &pwm_duty_cycle);
ret = libsoc_pwm_set_duty_cycle(vf_pwm, pwm_duty_cycle);
if (ret == EXIT_FAILURE) {
perror("PWM set duty cycle failed");
goto exit_failure;
}
ret = libsoc_pwm_set_enabled(vf_pwm, ENABLED);
if (ret == EXIT_FAILURE) {
perror("PWM enable failed");
goto exit_failure;
}
printf("PWM will be running for 10 seconds\n");
sleep(10);
printf("Disabling PWM\n");
ret = libsoc_pwm_set_enabled(vf_pwm, DISABLED);
if (ret == EXIT_FAILURE)
perror("PWM disable failed");
exit_failure:
libsoc_pwm_free(vf_pwm);
return ret;
}