aboutsummaryrefslogtreecommitdiffstats
path: root/src/wiring/pwm.c
blob: 0c33c3aa79720d4ab9ef2c9613a0258551b48f56 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "wiring.h"
#include "timers.h"
#include "gpio.h"
#include "pwm.h"

#define NOT_A_TIMER 0

static const TimerCCR PIN_TO_TIMER[NR_MAPLE_PINS] = {
    TIMER2_CH4_CCR,                     // D0/A6
    TIMER2_CH3_CCR,                     // D1/A7
    TIMER2_CH1_CCR,                     // D2/A8
    TIMER2_CH2_CCR,                     // D3/A9
    NOT_A_TIMER,                        // D4
    TIMER4_CH1_CCR,                     // D5
    TIMER1_CH1_CCR,                     // D6
    TIMER1_CH2_CCR,                     // D7
    TIMER1_CH3_CCR,                     // D8
    TIMER4_CH2_CCR,                     // D9
    NOT_A_TIMER,                        // D10/A10
    TIMER3_CH2_CCR,                     // D11/A11
    TIMER3_CH1_CCR,                     // D12/A12
    NOT_A_TIMER,                        // D13/A13
};

void pwmWrite(uint8_t pin, uint16_t duty_cycle) {
    TimerCCR ccr;

    if (pin >= NR_MAPLE_PINS) {
        return;
    }

    ccr = PIN_TO_TIMER[pin];

    if (ccr == NOT_A_TIMER)
        return;

    timer_pwm_write_ccr(ccr, duty_cycle);
}