pwm.c

Go to the documentation of this file.
00001 
00041 #include "cfg/cfg_pwm.h"
00042 
00043 #include <cfg/macros.h>
00044 
00045 // Define logging setting (for cfg/log.h module).
00046 #define LOG_LEVEL         PWM_LOG_LEVEL
00047 #define LOG_VERBOSITY     PWM_LOG_FORMAT
00048 
00049 #include <cfg/log.h>
00050 #include <cfg/debug.h>
00051 
00052 #include <drv/pwm.h>
00053 
00054 #include CPU_HEADER(pwm)
00055 
00056 #include <cpu/types.h>
00057 #include <cpu/irq.h>
00058 
00059 
00063 void pwm_setDuty(PwmDev dev, pwm_duty_t duty)
00064 {
00065     pwm_period_t period = 0;
00066     pwm_duty_t real_duty = 0;
00067 
00068     duty = MIN(duty, PWM_MAX_DUTY);
00069 
00070     period = pwm_hw_getPeriod(dev);
00071 
00072     real_duty = (uint64_t)(duty * period) >> (uint64_t)PWM_MAX_PERIOD_LOG2;
00073 
00074     LOG_INFO("real_duty[%d] duty[%d], period[%d]", real_duty, duty, period);
00075     pwm_hw_setDutyUnlock(dev, real_duty);
00076 }
00077 
00081 void pwm_setFrequency(PwmDev dev, pwm_freq_t freq)
00082 {
00083     pwm_hw_setFrequency(dev, freq);
00084 }
00085 
00089 void pwm_enable(PwmDev dev, bool state)
00090 {
00091     if (state)
00092         pwm_hw_enable(dev);
00093     else
00094         pwm_hw_disable(dev);
00095 }
00096 
00100 void pwm_init(void)
00101 {
00102     cpu_flags_t flags;
00103     PwmDev dev;
00104 
00105     IRQ_SAVE_DISABLE(flags);
00106 
00107     pwm_hw_init();
00108 
00109     /* set all pwm to 0 */
00110     for (dev = 0; dev < PWM_CNT; dev++)
00111         pwm_setDuty(dev, 0);
00112 
00113     IRQ_RESTORE(flags);
00114 }
00115 
00116 
00117 
00118