added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
JojoS
Date:
Sat Sep 10 15:32:04 2016 +0000
Revision:
147:ba84b7dc41a7
Parent:
107:414e9c822e99
added prescaler for 16 bit timers (solution as in LPC11xx), default prescaler 31 for max 28 ms period time

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 107:414e9c822e99 1 /* mbed Microcontroller Library
mbed_official 107:414e9c822e99 2 * Copyright (c) 2006-2015 ARM Limited
mbed_official 107:414e9c822e99 3 *
mbed_official 107:414e9c822e99 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 107:414e9c822e99 5 * you may not use this file except in compliance with the License.
mbed_official 107:414e9c822e99 6 * You may obtain a copy of the License at
mbed_official 107:414e9c822e99 7 *
mbed_official 107:414e9c822e99 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 107:414e9c822e99 9 *
mbed_official 107:414e9c822e99 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 107:414e9c822e99 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 107:414e9c822e99 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 107:414e9c822e99 13 * See the License for the specific language governing permissions and
mbed_official 107:414e9c822e99 14 * limitations under the License.
mbed_official 107:414e9c822e99 15 */
mbed_official 107:414e9c822e99 16 #include "mbed_assert.h"
mbed_official 107:414e9c822e99 17 #include "analogin_api.h"
mbed_official 107:414e9c822e99 18 #include "cmsis.h"
mbed_official 107:414e9c822e99 19 #include "adc2.h"
mbed_official 107:414e9c822e99 20 #include "PeripheralPins.h"
mbed_official 107:414e9c822e99 21
mbed_official 107:414e9c822e99 22 extern uint8_t g_sys_init;
mbed_official 107:414e9c822e99 23 static uint8_t adc_inited = 0;
mbed_official 107:414e9c822e99 24
mbed_official 107:414e9c822e99 25 void analogin_init(analogin_t *obj, PinName pin)
mbed_official 107:414e9c822e99 26 {
mbed_official 107:414e9c822e99 27 MBED_ASSERT(obj);
mbed_official 107:414e9c822e99 28 if (g_sys_init == 0) {
mbed_official 107:414e9c822e99 29 sysclk_init();
mbed_official 107:414e9c822e99 30 system_board_init();
mbed_official 107:414e9c822e99 31 g_sys_init = 1;
mbed_official 107:414e9c822e99 32 }
mbed_official 107:414e9c822e99 33 obj->channel = (enum adc_channel_num)pinmap_peripheral(pin, PinMap_ADC);
mbed_official 107:414e9c822e99 34 MBED_ASSERT(obj->channel != NC);
mbed_official 107:414e9c822e99 35 if(!adc_inited) { /*ADC hardare to be initialised only once*/
mbed_official 107:414e9c822e99 36 adc_enable();
mbed_official 107:414e9c822e99 37 #if SAMG55
mbed_official 107:414e9c822e99 38 adc_select_clock_source_mck(ADC);
mbed_official 107:414e9c822e99 39 #endif
mbed_official 107:414e9c822e99 40 struct adc_config adc_cfg;
mbed_official 107:414e9c822e99 41 adc_get_config_defaults(&adc_cfg);
mbed_official 107:414e9c822e99 42 adc_cfg.resolution = ADC_16_BITS;
mbed_official 107:414e9c822e99 43 adc_init(ADC, &adc_cfg);
mbed_official 107:414e9c822e99 44 adc_average_on_single_trigger(ADC);
mbed_official 107:414e9c822e99 45 adc_set_trigger(ADC, ADC_TRIG_SW);
mbed_official 107:414e9c822e99 46 adc_start_calibration(ADC);
mbed_official 107:414e9c822e99 47 adc_inited = 1;
mbed_official 107:414e9c822e99 48 }
mbed_official 107:414e9c822e99 49 adc_channel_enable(ADC, obj->channel);
mbed_official 107:414e9c822e99 50 }
mbed_official 107:414e9c822e99 51
mbed_official 107:414e9c822e99 52 uint16_t analogin_read_u16(analogin_t *obj)
mbed_official 107:414e9c822e99 53 {
mbed_official 107:414e9c822e99 54 MBED_ASSERT(obj);
mbed_official 107:414e9c822e99 55 adc_channel_get_value(ADC, obj->channel); /*Dummy read of current value*/
mbed_official 107:414e9c822e99 56 adc_start_software_conversion(ADC);
mbed_official 107:414e9c822e99 57 while (adc_get_interrupt_status(ADC) & (1 << obj->channel));
mbed_official 107:414e9c822e99 58 return (uint16_t)adc_channel_get_value(ADC, obj->channel);
mbed_official 107:414e9c822e99 59 }
mbed_official 107:414e9c822e99 60
mbed_official 107:414e9c822e99 61 float analogin_read(analogin_t *obj)
mbed_official 107:414e9c822e99 62 {
mbed_official 107:414e9c822e99 63 MBED_ASSERT(obj);
mbed_official 107:414e9c822e99 64 uint16_t value = analogin_read_u16(obj);
mbed_official 107:414e9c822e99 65 return (float)value * (1.0f / (float)0xFFFF);
mbed_official 107:414e9c822e99 66 }