Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-dev by
Revision 79:9f34958201cc, committed 2016-03-14
- Comitter:
- jcassette
- Date:
- Mon Mar 14 14:20:17 2016 +0000
- Parent:
- 78:fcc37a1ad8f5
- Commit message:
- FRDM-K64F AnalogIn: add support for ADC channels with no mapped pins
Changed in this revision
--- a/api/AnalogIn.h Tue Mar 01 07:15:10 2016 +0000 +++ b/api/AnalogIn.h Mon Mar 14 14:20:17 2016 +0000 @@ -50,10 +50,17 @@ /** Create an AnalogIn, connected to the specified pin * * @param pin AnalogIn pin to connect to - * @param name (optional) A string to identify the object */ AnalogIn(PinName pin) { - analogin_init(&_adc, pin); + analogin_init_pin(&_adc, pin); + } + + /** Create an AnalogIn, connected to the specified ADC channel + * + * @param name ADC channel to connect to + */ + AnalogIn(ADCName name) { + analogin_init_name(&_adc, name); } /** Read the input voltage, represented as a float in the range [0.0, 1.0]
--- a/hal/analogin_api.h Tue Mar 01 07:15:10 2016 +0000 +++ b/hal/analogin_api.h Mon Mar 14 14:20:17 2016 +0000 @@ -26,7 +26,8 @@ typedef struct analogin_s analogin_t; -void analogin_init (analogin_t *obj, PinName pin); +void analogin_init_pin(analogin_t *obj, PinName pin); +void analogin_init_name(analogin_t *obj, ADCName name); float analogin_read (analogin_t *obj); uint16_t analogin_read_u16(analogin_t *obj);
--- a/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/analogin_api.c Tue Mar 01 07:15:10 2016 +0000 +++ b/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/analogin_api.c Mon Mar 14 14:20:17 2016 +0000 @@ -28,8 +28,7 @@ #define MAX_FADC 6000000 -void analogin_init(analogin_t *obj, PinName pin) { - obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC); +static void analogin_init(analogin_t *obj) { MBED_ASSERT(obj->adc != (ADCName)NC); uint32_t instance = obj->adc >> ADC_INSTANCE_SHIFT; @@ -59,15 +58,24 @@ ADC_HAL_SetHwAverageMode(adc_addrs[instance], kAdcHwAverageCountOf4); ADC_HAL_SetChnMuxMode(adc_addrs[instance], obj->adc & (1 << ADC_B_CHANNEL_SHIFT) ? kAdcChnMuxOfB : kAdcChnMuxOfA); +} +void analogin_init_pin(analogin_t *obj, PinName pin) { + obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC); + analogin_init(obj); pinmap_pinout(pin, PinMap_ADC); } +void analogin_init_name(analogin_t *obj, ADCName name) { + obj->adc = name; + analogin_init(obj); +} + uint16_t analogin_read_u16(analogin_t *obj) { uint32_t instance = obj->adc >> ADC_INSTANCE_SHIFT; uint32_t adc_addrs[] = ADC_BASE_ADDRS; /* sw trigger (SC1A) */ - ADC_HAL_ConfigChn(adc_addrs[instance], 0, false, false, obj->adc & 0xF); + ADC_HAL_ConfigChn(adc_addrs[instance], 0, false, false, obj->adc & 0x1F); while (!ADC_HAL_GetChnConvCompletedCmd(adc_addrs[instance], 0)); return ADC_HAL_GetChnConvValueRAW(adc_addrs[instance], 0); }