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