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