cpu/lpc2387: adapted to PWM interface changes

This commit is contained in:
Hauke Petersen 2015-10-21 12:42:52 +02:00 committed by Joakim Nohlgård
parent b96cb04df2
commit b41f915d86

View File

@ -20,18 +20,21 @@
#include "bitarithm.h" #include "bitarithm.h"
#include "lpc2387.h" #include "lpc2387.h"
#include "periph/pwm.h"
#include "periph_conf.h" #include "periph_conf.h"
/* guard file in case no PWM device is defined */ /* guard file in case no PWM device is defined */
#if PWM_NUMOF #if (PWM_0_EN || PWM_1_EN)
/* pull the PWM header inside the guards for now. Guards will be removed on
* adapting this driver implementation... */
#include "periph/pwm.h"
/** /**
* @note The PWM is always initialized with left-aligned mode. * @note The PWM is always initialized with left-aligned mode.
* *
* TODO: add center and right aligned modes * TODO: add center and right aligned modes
*/ */
int pwm_init(pwm_t dev, pwm_mode_t mode, unsigned int frequency, unsigned int resolution) uint32_t pwm_init(pwm_t dev, pwm_mode_t mode, uint32_t freq, uint16_t res)
{ {
(void) mode; /* unused */ (void) mode; /* unused */
@ -57,10 +60,10 @@ int pwm_init(pwm_t dev, pwm_mode_t mode, unsigned int frequency, unsigned int re
PWM1TCR = BIT1; PWM1TCR = BIT1;
/* set prescaler */ /* set prescaler */
PWM1PR = (CLOCK_CORECLOCK / (frequency * resolution)) - 1; PWM1PR = (CLOCK_CORECLOCK / (freq * res)) - 1;
/* set match register */ /* set match register */
PWM1MR0 = resolution; PWM1MR0 = res;
PWM_0_CH0_MR = 0; PWM_0_CH0_MR = 0;
PWM_0_CH1_MR = 0; PWM_0_CH1_MR = 0;
PWM_0_CH2_MR = 0; PWM_0_CH2_MR = 0;
@ -78,12 +81,22 @@ int pwm_init(pwm_t dev, pwm_mode_t mode, unsigned int frequency, unsigned int re
PWM1LER = BIT0 | (1 << PWM_0_CH0) | (1 << PWM_0_CH1) | (1 << PWM_0_CH2); PWM1LER = BIT0 | (1 << PWM_0_CH0) | (1 << PWM_0_CH1) | (1 << PWM_0_CH2);
break; break;
#endif #endif
default:
return 0;
} }
return frequency; return freq;
} }
int pwm_set(pwm_t dev, int channel, unsigned int value) uint8_t pwm_channels(pwm_t dev)
{
if (dev == PWM_0) {
return PWM_0_CHANNELS;
}
return 0;
}
void pwm_set(pwm_t dev, uint8_t channel, uint16_t value)
{ {
switch (dev) { switch (dev) {
#if PWM_0_EN #if PWM_0_EN
@ -102,14 +115,12 @@ int pwm_set(pwm_t dev, int channel, unsigned int value)
PWM1LER |= (1 << PWM_0_CH2); PWM1LER |= (1 << PWM_0_CH2);
break; break;
default: default:
return -2; return;
break; break;
} }
break; break;
#endif #endif
} }
return 0;
} }
void pwm_start(pwm_t dev) void pwm_start(pwm_t dev)
@ -156,4 +167,4 @@ void pwm_poweroff(pwm_t dev)
} }
} }
#endif /* PWM_NUMOF */ #endif /* (PWM_0_EN || PWM_1_EN) */