X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=drv%2Fpwm.c;h=3946188262263c0f406062adef2fac522a19d77b;hb=af9cba1c451a41879ceddeab818bc265fb4923ff;hp=452e94136cb57e82a303f363687324307d2b48c8;hpb=41625d1b16c8f1904c3a2a40b6972725311c66a8;p=bertos.git diff --git a/drv/pwm.c b/drv/pwm.c old mode 100755 new mode 100644 index 452e9413..39461882 --- a/drv/pwm.c +++ b/drv/pwm.c @@ -1,57 +1,91 @@ -/*! +/** * \file * * - * \version $Id$ * * \brief PWM driver (implementation) * * \version $Id$ + * * \author Francesco Sacchi + * \author Daniele Basile */ -/*#* - *#* $Log$ - *#* Revision 1.1 2005/11/04 18:08:49 bernie - *#* Import into DevLib. - *#* - *#* Revision 1.2 2005/05/24 13:35:01 batt - *#* Add missing; reformat. - *#* - *#* Revision 1.1 2005/05/24 09:17:58 batt - *#* Move drivers to top-level. - *#* - *#* Revision 1.4 2005/05/09 16:36:12 batt - *#* Change some function names to accomplish coding standard. - *#* - *#* Revision 1.3 2005/05/02 16:35:47 batt - *#* Add some comments. - *#* - *#* Revision 1.2 2005/05/02 16:02:58 batt - *#* Remove unusefull interrupt saving. - *#* - *#* Revision 1.1 2005/05/02 12:36:39 batt - *#* Add pwm driver. - *#* - *#*/ - -#include +#include +#include + #include +#include + #include +#include + -/*! - * Set duty of pwm channel \a dev. +/** + * Set duty of pwm channel \p dev. */ void pwm_setDuty(PwmDev dev, pwm_duty_t duty) { + pwm_period_t period = 0; + pwm_duty_t real_duty = 0; + duty = MIN(duty, (pwm_duty_t)PWM_MAX_DUTY); - pwm_hw_setDutyUnlock(dev, duty); + period = pwm_hw_getPeriod(dev); + + real_duty = (uint64_t)(duty * period) >> (uint64_t)PWM_MAX_PERIOD_LOG2; + +// kprintf("real_duty[%d] duty[%d], period[%d]\n", real_duty, duty, period); + pwm_hw_setDutyUnlock(dev, real_duty); } -/*! +/** + * Set frequency of pwm channel \p dev at \p freq in Hz. + */ +void pwm_setFrequency(PwmDev dev, pwm_freq_t freq) +{ + pwm_hw_setFrequency(dev, freq); +} + +/** + * Set duty of pwm channel \p dev. + */ +void pwm_enable(PwmDev dev, bool state) +{ + if (state) + pwm_hw_enable(dev); + else + pwm_hw_disable(dev); +} + +/** * Initialize PWM hw. */ void pwm_init(void) @@ -65,7 +99,11 @@ void pwm_init(void) for (dev = 0; dev < PWM_CNT; dev++) pwm_setDuty(dev, 0); - PWM_HW_INIT; + pwm_hw_init(); IRQ_RESTORE(flags); } + + + +