pwm.c

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