mbed library sources for GR-PEACH rev.B.

Fork of mbed-src by mbed official

Revision:
511:532f83b66a7f
Parent:
442:d916d321e60f
--- a/targets/hal/TARGET_STM/TARGET_STM32F4/pwmout_api.c	Thu Apr 09 08:00:08 2015 +0100
+++ b/targets/hal/TARGET_STM/TARGET_STM32F4/pwmout_api.c	Thu Apr 09 12:15:08 2015 +0100
@@ -43,6 +43,12 @@
     // Get the peripheral name from the pin and assign it to the object
     obj->pwm = (PWMName)pinmap_peripheral(pin, PinMap_PWM);
 
+    // Get the functions (timer channel, (non)inverted) from the pin and assign it to the object
+    uint32_t function = pinmap_function(pin, PinMap_PWM);
+    MBED_ASSERT(function != (uint32_t)NC);
+    obj->channel  = STM_PIN_CHANNEL(function);
+    obj->inverted = STM_PIN_INVERTED(function);
+
     if (obj->pwm == (PWMName)NC) {
         error("PWM error: pinout mapping failed.");
     }
@@ -52,9 +58,18 @@
     if (obj->pwm == PWM_2) __TIM2_CLK_ENABLE();
     if (obj->pwm == PWM_3) __TIM3_CLK_ENABLE();
     if (obj->pwm == PWM_4) __TIM4_CLK_ENABLE();
+#if defined(TIM8_BASE)
+    if (obj->pwm == PWM_8) __TIM8_CLK_ENABLE();
+#endif
     if (obj->pwm == PWM_9) __TIM9_CLK_ENABLE();
     if (obj->pwm == PWM_10) __TIM10_CLK_ENABLE();
     if (obj->pwm == PWM_11) __TIM11_CLK_ENABLE();
+#if defined(TIM13_BASE)
+    if (obj->pwm == PWM_13) __TIM13_CLK_ENABLE();
+#endif
+#if defined(TIM14_BASE)
+    if (obj->pwm == PWM_14) __TIM14_CLK_ENABLE();
+#endif
 
     // Configure GPIO
     pinmap_pinout(pin, PinMap_PWM);
@@ -97,65 +112,22 @@
     sConfig.OCIdleState  = TIM_OCIDLESTATE_RESET;
     sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
 
-    switch (obj->pin) {
+    complementary_channel = obj->inverted;
+    switch (obj->channel) {
 
-        // Channels 1
-        case PA_0:
-        case PA_5:
-        case PA_6:
-        case PA_8:
-        case PA_15:
-        case PB_4:
-        case PB_6:
-        case PC_6:
+        case 1:
             channel = TIM_CHANNEL_1;
             break;
 
-        // Channels 1N
-        case PA_7:
-        case PB_13:
-            channel = TIM_CHANNEL_1;
-            complementary_channel = 1;
-            break;
-
-        // Channels 2
-        case PA_1:
-        case PA_9:
-        case PB_3:
-        case PB_5:
-        case PB_7:
-        case PC_7:
+        case 2:
             channel = TIM_CHANNEL_2;
             break;
 
-        // Channels 2N
-        case PB_0:
-        case PB_14:
-            channel = TIM_CHANNEL_2;
-            complementary_channel = 1;
-            break;
-
-        // Channels 3
-        case PA_2:
-        case PA_10:
-        case PB_8:
-        case PB_10:
-        case PC_8:
+        case 3:
             channel = TIM_CHANNEL_3;
             break;
 
-        // Channels 3N
-        case PB_1:
-        case PB_15:
-            channel = TIM_CHANNEL_3;
-            complementary_channel = 1;
-            break;
-
-        // Channels 4
-        case PA_3:
-        case PA_11:
-        case PB_9:
-        case PC_9:
+        case 4:
             channel = TIM_CHANNEL_4;
             break;