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/analogin_api.c	Wed Jan 13 12:45:11 2016 +0000
+++ b/targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/analogin_api.c	Fri Jan 15 07:45:16 2016 +0000
@@ -41,26 +41,16 @@
 #include "em_adc.h"
 #include "em_cmu.h"
 
-uint8_t analogin_get_index(analogin_t *obj)
+void analogin_init(analogin_t *obj, PinName pin)
 {
-    return 0; //only one module availalbe
-}
+    static uint8_t adc_initialized = 0;
 
-void analogin_preinit(analogin_t *obj, PinName pin)
-{
+    /* Init structure */
     obj->adc = (ADC_TypeDef *) pinmap_peripheral(pin, PinMap_ADC);
     MBED_ASSERT((int) obj->adc != NC);
 
     obj->channel = pin_location(pin, PinMap_ADC);
     MBED_ASSERT((int) obj->channel != NC);
-}
-
-void analogin_init(analogin_t *obj, PinName pin)
-{
-    static uint8_t adc_initialized = 0;
-
-    /* Init structure */
-    analogin_preinit(obj, pin);
 
     /* Only initialize the ADC once */
     if (!adc_initialized) {
@@ -86,31 +76,6 @@
     }
 }
 
-void analogin_enable(analogin_t *obj, uint8_t enable)
-{
-    //not avail for EFM32
-}
-
-void analogin_enable_pins(analogin_t *obj, uint8_t enable)
-{
-    //not avail for EFM32
-}
-
-void analogin_enable_interrupt(analogin_t *obj, uint32_t address, uint8_t enable)
-{
-    NVIC_SetVector(ADC0_IRQn, address);
-    if (enable) {
-        // enable end of conversion interrupt
-        ADC_IntEnable(obj->adc, ADC_IEN_SCAN);
-        ADC_IntSet(obj->adc, ADC_IF_SCAN);
-        NVIC_EnableIRQ(ADC0_IRQn);
-    } else {
-        ADC_IntDisable(obj->adc, ADC_IEN_SCAN);
-        ADC_IntClear(obj->adc, ADC_IF_SCAN);
-        NVIC_DisableIRQ(ADC0_IRQn);
-    }
-}
-
 uint16_t analogin_read_u16(analogin_t *obj)
 {
     ADC_TypeDef *adc = obj->adc;
@@ -120,7 +85,11 @@
     adc->CMD = ADC_CMD_SINGLESTOP;
 
     // Make sure we are checking the correct channel
+#if defined _ADC_SINGLECTRL_INPUTSEL_MASK
     adc->SINGLECTRL = (adc->SINGLECTRL & ~_ADC_SINGLECTRL_INPUTSEL_MASK) | obj->channel;
+#elif _ADC_SINGLECTRL_POSSEL_MASK
+    adc->SINGLECTRL = (adc->SINGLECTRL & ~_ADC_SINGLECTRL_POSSEL_MASK) | obj->channel << _ADC_SINGLECTRL_POSSEL_SHIFT;
+#endif
 
     ADC_Start(adc, adcStartSingle);