Timer based PWM output for MAX32630FTHR platform

This library provides PWM output using the MAX32630 32-bit timers.

The mbed PwmOut API implementation uses the MAX32630 Pulse Train peripherals.

The table below contains the available GPIO pins that can be connected to the six 32-bit timers (TMR0-5). Timer 0 is used for the microsecond ticker API and is not available for PWM output. Timer 5 is used by the BLE API and will not be available for PWM output if the BLE API is used.

TimerGPIO Port and Pin
TMR1P3_1, P5_3
TMR2P2_4, P3_2, P4_0, P5_4
TMR3P2_5, P3_3, P5_5
TMR4P2_6, P3_4, P5_0, P5_6
TMR5P3_5, P5_1

Note GPIO P2_4, P2_5 and P2_6 are connected to onboard LEDs 1, 2 and 3.

Revision:
3:717258c64304
Parent:
2:77d9bb2fa44e
Child:
4:bd1c27ca31e8
--- a/MAX32630FTHR_PwmOut.h	Fri Apr 20 17:40:46 2018 +0000
+++ b/MAX32630FTHR_PwmOut.h	Fri Apr 20 22:36:02 2018 +0000
@@ -38,32 +38,36 @@
  * not be available for PWM output if the BLE API is used.
  * 
  * Timer | GPIO Port and Pin<br>
- * TMR1  | P3_1,              P5_3<br>
- * TMR2  | P3_2,  P4_0,        P5_4<br>
- * TMR3  | P3_3,              P5_5<br>
- * TMR4  | P3_4,        P5_0,  P5_6<br>
- * TMR5  | P3_5,        P5_1<br>
+ * TMR1  |       P3_1,              P5_3<br>
+ * TMR2  | P2_4, P3_2,  P4_0,       P5_4<br>
+ * TMR3  | P2_5, P3_3,              P5_5<br>
+ * TMR4  | P2_6, P3_4,        P5_0, P5_6<br>
+ * TMR5  |       P3_5,        P5_1<br>
+ *
+ * Note GPIO P2_4, P2_5 and P2_6 are connected to onboard LEDs 1, 2 and 3.
  *
  * @code
  * #include "mbed.h"
  * #include "MAX32630FTHR_PwmOut.h"
- *
- * DigitalOut led(LED1, LED_OFF);
- * MAX32630FTHR_PwmOut servo(P3_4);
- *
+ * 
+ * MAX32630FTHR_PwmOut led[] = {
+ *     MAX32630FTHR_PwmOut(LED1),
+ *     MAX32630FTHR_PwmOut(LED2),
+ *     MAX32630FTHR_PwmOut(LED3)
+ * };
+ * 
  * int main()
  * {
+ *     float dc;
+ *     unsigned int idx = 0;
+ * 
  *     while (1) {
- *         led = !led;
- *         for (float pw = 0.000f; pw <= 1.000f; pw += 0.001f) {
- *              servo.write(pw);
- *              wait_ms(100);
+ *         for (dc = 0.0f; dc <= 1.0f; dc += 0.01f) {
+ *             led[idx % 3].write(dc);
+ *             led[(idx + 1) % 3].write(1.0f - dc);
+ *             wait_ms(20);
  *         }
- *         led = !led;
- *         for (float pw = 1.000f; pw >= 0.000f; pw -= 0.001f) {
- *              servo = pw;
- *              wait_ms(100);
- *         }
+ *         idx++;
  *     }
  * }
  * @endcode