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