diff options
Diffstat (limited to 'src/wiring/pwm.c')
-rw-r--r-- | src/wiring/pwm.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/wiring/pwm.c b/src/wiring/pwm.c new file mode 100644 index 0000000..0c33c3a --- /dev/null +++ b/src/wiring/pwm.c @@ -0,0 +1,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); +} + + |