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
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
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