Skip to content
Snippets Groups Projects
Commit 784c9b9b authored by Peter Kietzmann's avatar Peter Kietzmann
Browse files

Merge pull request #4847 from haukepetersen/add_samr21_3rdpwm

boards/samr21-xpro: added third channel for PWM1
parents c82dda9b bc1013b5
No related branches found
No related tags found
No related merge requests found
......@@ -122,7 +122,7 @@ static const uart_conf_t uart_config[] = {
*/
#define PWM_0_EN 1
#define PWM_1_EN 1
#define PWM_MAX_CHANNELS 2
#define PWM_MAX_CHANNELS 3
/* for compatibility with test application */
#define PWM_0_CHANNELS PWM_MAX_CHANNELS
#define PWM_1_CHANNELS PWM_MAX_CHANNELS
......@@ -132,16 +132,18 @@ static const pwm_conf_t pwm_config[] = {
#if PWM_0_EN
{TCC1, {
/* GPIO pin, MUX value, TCC channel */
{GPIO_PIN(PA, 6), GPIO_MUX_E, 0},
{GPIO_PIN(PA, 7), GPIO_MUX_E, 1}
{ GPIO_PIN(PA, 6), GPIO_MUX_E, 0 },
{ GPIO_PIN(PA, 7), GPIO_MUX_E, 1 },
{ GPIO_UNDEF, (gpio_mux_t)0, 2 }
}},
#endif
#if PWM_1_EN
{TCC0, {
/* GPIO pin, MUX value, TCC channel */
{GPIO_PIN(PA, 18), GPIO_MUX_F, 2},
{GPIO_PIN(PA, 19), GPIO_MUX_F, 3}
}},
{ GPIO_PIN(PA, 16), GPIO_MUX_F, 0 },
{ GPIO_PIN(PA, 18), GPIO_MUX_F, 2 },
{ GPIO_PIN(PA, 19), GPIO_MUX_F, 3 }
}}
#endif
};
......
......@@ -48,7 +48,7 @@ typedef struct {
*/
typedef struct {
Tcc *dev; /**< TCC device to use */
pwm_conf_chan_t chan[2]; /**< channel configuration */
pwm_conf_chan_t chan[3]; /**< channel configuration */
} pwm_conf_t;
/**
......
......@@ -106,8 +106,10 @@ uint32_t pwm_init(pwm_t dev, pwm_mode_t mode, uint32_t freq, uint16_t res)
/* configure the used pins */
for (int i = 0; i < PWM_MAX_CHANNELS; i++) {
gpio_init(pwm_config[dev].chan[i].pin, GPIO_DIR_OUT, GPIO_NOPULL);
gpio_init_mux(pwm_config[dev].chan[i].pin, pwm_config[dev].chan[i].mux);
if (pwm_config[dev].chan[i].pin != GPIO_UNDEF) {
gpio_init(pwm_config[dev].chan[i].pin, GPIO_DIR_OUT, GPIO_NOPULL);
gpio_init_mux(pwm_config[dev].chan[i].pin, pwm_config[dev].chan[i].mux);
}
}
/* power on the device */
......@@ -152,7 +154,8 @@ uint8_t pwm_channels(pwm_t dev)
void pwm_set(pwm_t dev, uint8_t channel, uint16_t value)
{
if (channel >= PWM_MAX_CHANNELS) {
if ((channel >= PWM_MAX_CHANNELS) ||
(pwm_config[dev].chan[channel].pin == GPIO_UNDEF)) {
return;
}
_tcc(dev)->CC[_chan(dev, channel)].reg = value;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment