Hardware Reference
In-Depth Information
36 FD_ZERO(&mt);
37 timeout.tv_sec = floor(seconds);
38 timeout.tv_usec = floor((seconds - floor(seconds)) * 1000000);
39
40 do {
41 rc = select(0,&mt,&mt,&mt,&timeout);
42 } while ( rc < 0 && time out.tv_sec && timeout.tv_usec );
43 }
44
45 /*
46 * Thread performing the PWM function :
47 */
48 static void *
49 soft_pwm(void *arg) {
50 PWM *pwm = (PWM *)arg;
51 double fperiod, percent, ontime;
52
53 while ( !pwm >stopf ) {
54 fperiod = 1.0 / pwm->freq;
55 percent = (double ) pwm->n / (double) pwm->m;
56 ontime = fperiod * percent ;
57 for ( pwm->chgf =0; !pwm->chgf && !pwm->stopf; ) {
58 gpio_write (pwm->gpio,1);
59 float_wait(ontime);
60
61 gpio_write(pwm->gpio,0);
62 float_wait(fperiod ontime);
63 }
64 }
65
66 return 0;
67 }
68
69 /*
70 * Open a soft PWM object:
71 */
72 PWM *
73 pwm_open(int gpio,double freq) {
74 PWM *pwm = malloc(sizeof *pwm);
75
76 pwm->gpio = gpio;
77 pwm->freq = freq;
78 pwm->thread = 0;
79 pwm->n = pwm->m = 0;
80 pwm->chgf = 0;
81 pwm->stopf = 0;
82
Search WWH ::




Custom Search