aboutsummaryrefslogtreecommitdiffstats
path: root/src/wiring/pwm.c
diff options
context:
space:
mode:
authoriperry <iperry@749a229e-a60e-11de-b98f-4500b42dc123>2009-12-17 02:37:07 +0000
committeriperry <iperry@749a229e-a60e-11de-b98f-4500b42dc123>2009-12-17 02:37:07 +0000
commit32e57dac2e61e79b029593eb4d34d727bcc10678 (patch)
tree98d7ff41993576bb150d13d5f63dc744f6812852 /src/wiring/pwm.c
downloadlibrambutan-32e57dac2e61e79b029593eb4d34d727bcc10678.tar.gz
librambutan-32e57dac2e61e79b029593eb4d34d727bcc10678.zip
Initial commit of library code, moved from leaftest repo
git-svn-id: https://leaflabs.googlecode.com/svn/trunk/library@69 749a229e-a60e-11de-b98f-4500b42dc123
Diffstat (limited to 'src/wiring/pwm.c')
-rw-r--r--src/wiring/pwm.c40
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);
+}
+
+