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