pwm.c
Go to the documentation of this file.00001 00041 #include <cpu/types.h> 00042 #include <cpu/irq.h> 00043 00044 #include <drv/pwm.h> 00045 #include <drv/pwm_at91.h> 00046 00047 #include <cfg/macros.h> 00048 #include <cfg/debug.h> 00049 00050 00054 void pwm_setDuty(PwmDev dev, pwm_duty_t duty) 00055 { 00056 pwm_period_t period = 0; 00057 pwm_duty_t real_duty = 0; 00058 00059 duty = MIN(duty, (pwm_duty_t)PWM_MAX_DUTY); 00060 00061 period = pwm_hw_getPeriod(dev); 00062 00063 real_duty = (uint64_t)(duty * period) >> (uint64_t)PWM_MAX_PERIOD_LOG2; 00064 00065 // TRACEMSG("real_duty[%d] duty[%d], period[%d]", real_duty, duty, period); 00066 pwm_hw_setDutyUnlock(dev, real_duty); 00067 } 00068 00072 void pwm_setFrequency(PwmDev dev, pwm_freq_t freq) 00073 { 00074 pwm_hw_setFrequency(dev, freq); 00075 } 00076 00080 void pwm_enable(PwmDev dev, bool state) 00081 { 00082 if (state) 00083 pwm_hw_enable(dev); 00084 else 00085 pwm_hw_disable(dev); 00086 } 00087 00091 void pwm_init(void) 00092 { 00093 cpuflags_t flags; 00094 PwmDev dev; 00095 00096 IRQ_SAVE_DISABLE(flags); 00097 00098 pwm_hw_init(); 00099 00100 /* set all pwm to 0 */ 00101 for (dev = 0; dev < PWM_CNT; dev++) 00102 pwm_setDuty(dev, 0); 00103 00104 IRQ_RESTORE(flags); 00105 } 00106 00107 00108 00109
