added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Revision:
50:a417edff4437
Parent:
0:9b334a45a8ff
Child:
144:ef7eb2e8f9f7
--- a/targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/gpio_api.c	Wed Jan 13 12:45:11 2016 +0000
+++ b/targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/gpio_api.c	Fri Jan 15 07:45:16 2016 +0000
@@ -55,7 +55,7 @@
 
 int gpio_is_connected(const gpio_t *obj)
 {
-    return (obj->pin | 0xFFFFFF00 )!= (PinName)NC;
+    return ((uint32_t)obj->pin | 0xFFFFFF00 ) != (uint32_t)((PinName)NC);
 }
 
 /*
@@ -80,7 +80,10 @@
 
 void gpio_mode(gpio_t *obj, PinMode mode)
 {
-        if(obj->dir == PIN_INPUT) {
+    uint32_t pin = 1 << (obj->pin & 0xF);
+    uint32_t port = (obj->pin >> 4) & 0xF;
+
+    if(obj->dir == PIN_INPUT) {
         switch(mode) {
             case PullDefault:
                 mode = Input;
@@ -94,14 +97,22 @@
             default:
                 break;
         }
-        
+
         //Handle DOUT setting
         if((mode & 0x10) != 0) {
             //Set DOUT
-            GPIO->P[(obj->pin >> 4) & 0xF].DOUTSET = 1 << (obj->pin & 0xF);
+#ifdef _GPIO_P_DOUTSET_MASK
+            GPIO->P[port].DOUTSET = pin;
+#else
+            GPIO->P[port].DOUT |= pin;
+#endif
         } else {
             //Clear DOUT
-            GPIO->P[(obj->pin >> 4) & 0xF].DOUTCLR = 1 << (obj->pin & 0xF);
+#ifdef _GPIO_P_DOUTCLR_MASK
+            GPIO->P[port].DOUTCLR = pin;
+#else
+            GPIO->P[port].DOUT &= ~pin;
+#endif
         }
     } else {
         switch(mode) {
@@ -118,7 +129,7 @@
                 break;
         }
     }
-    
+
     obj->mode = mode; // Update object
     pin_mode(obj->pin, mode); // Update register
 }