pwm.c

Go to the documentation of this file.
00001 
00040 #include "cfg/cfg_pwm.h"
00041 
00042 #include <cfg/macros.h>
00043 #include <cfg/module.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]\n", 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 
00097 MOD_DEFINE(pwm);
00098 
00102 void pwm_init(void)
00103 {
00104     cpu_flags_t flags;
00105     PwmDev dev;
00106 
00107     IRQ_SAVE_DISABLE(flags);
00108 
00109     pwm_hw_init();
00110 
00111     /* set all pwm to 0 */
00112     for (dev = 0; dev < PWM_CNT; dev++)
00113         pwm_setDuty(dev, 0);
00114 
00115     IRQ_RESTORE(flags);
00116     MOD_INIT(pwm);
00117 }
00118 
00119 
00120 
00121