mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Tue Jul 29 19:00:07 2014 +0100
Revision:
268:402bcc0c870b
Parent:
251:de9a1e4ffd79
Child:
285:31249416b6f9
Synchronized with git revision 490d1a6606b3138f165c5edf2f2370ca616587c0

Full URL: https://github.com/mbedmicro/mbed/commit/490d1a6606b3138f165c5edf2f2370ca616587c0/

[LPC1114] Sleep fix + some device.h settings

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 130:1dec54e4aec3 1 /* mbed Microcontroller Library
mbed_official 130:1dec54e4aec3 2 * Copyright (c) 2014, STMicroelectronics
mbed_official 130:1dec54e4aec3 3 * All rights reserved.
mbed_official 130:1dec54e4aec3 4 *
mbed_official 130:1dec54e4aec3 5 * Redistribution and use in source and binary forms, with or without
mbed_official 130:1dec54e4aec3 6 * modification, are permitted provided that the following conditions are met:
mbed_official 130:1dec54e4aec3 7 *
mbed_official 130:1dec54e4aec3 8 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 130:1dec54e4aec3 9 * this list of conditions and the following disclaimer.
mbed_official 130:1dec54e4aec3 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 130:1dec54e4aec3 11 * this list of conditions and the following disclaimer in the documentation
mbed_official 130:1dec54e4aec3 12 * and/or other materials provided with the distribution.
mbed_official 130:1dec54e4aec3 13 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 130:1dec54e4aec3 14 * may be used to endorse or promote products derived from this software
mbed_official 130:1dec54e4aec3 15 * without specific prior written permission.
mbed_official 130:1dec54e4aec3 16 *
mbed_official 130:1dec54e4aec3 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 130:1dec54e4aec3 18 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 130:1dec54e4aec3 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 130:1dec54e4aec3 20 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 130:1dec54e4aec3 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 130:1dec54e4aec3 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 130:1dec54e4aec3 23 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 130:1dec54e4aec3 24 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 130:1dec54e4aec3 25 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 130:1dec54e4aec3 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 130:1dec54e4aec3 27 */
mbed_official 227:7bd0639b8911 28 #include "mbed_assert.h"
mbed_official 130:1dec54e4aec3 29 #include "analogin_api.h"
mbed_official 130:1dec54e4aec3 30
mbed_official 130:1dec54e4aec3 31 #if DEVICE_ANALOGIN
mbed_official 130:1dec54e4aec3 32
mbed_official 130:1dec54e4aec3 33 #include "cmsis.h"
mbed_official 130:1dec54e4aec3 34 #include "pinmap.h"
mbed_official 251:de9a1e4ffd79 35 #include "error.h"
mbed_official 240:9a7c54113eaf 36 #include "wait_api.h"
mbed_official 130:1dec54e4aec3 37
mbed_official 130:1dec54e4aec3 38 static const PinMap PinMap_ADC[] = {
mbed_official 130:1dec54e4aec3 39 {PA_0, ADC_1, STM_PIN_DATA(GPIO_Mode_AN, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF)}, // ADC_IN0
mbed_official 130:1dec54e4aec3 40 {PA_1, ADC_1, STM_PIN_DATA(GPIO_Mode_AN, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF)}, // ADC_IN1
mbed_official 240:9a7c54113eaf 41 {PA_2, ADC_1, STM_PIN_DATA(GPIO_Mode_AN, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF)}, // ADC_IN2
mbed_official 240:9a7c54113eaf 42 {PA_3, ADC_1, STM_PIN_DATA(GPIO_Mode_AN, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF)}, // ADC_IN3
mbed_official 130:1dec54e4aec3 43 {PA_4, ADC_1, STM_PIN_DATA(GPIO_Mode_AN, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF)}, // ADC_IN4
mbed_official 240:9a7c54113eaf 44 {PA_5, ADC_1, STM_PIN_DATA(GPIO_Mode_AN, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF)}, // ADC_IN5
mbed_official 240:9a7c54113eaf 45 {PA_6, ADC_1, STM_PIN_DATA(GPIO_Mode_AN, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF)}, // ADC_IN6
mbed_official 240:9a7c54113eaf 46 {PA_7, ADC_1, STM_PIN_DATA(GPIO_Mode_AN, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF)}, // ADC_IN7
mbed_official 130:1dec54e4aec3 47 {PB_0, ADC_1, STM_PIN_DATA(GPIO_Mode_AN, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF)}, // ADC_IN8
mbed_official 240:9a7c54113eaf 48 {PB_1, ADC_1, STM_PIN_DATA(GPIO_Mode_AN, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF)}, // ADC_IN9
mbed_official 240:9a7c54113eaf 49 {PC_0, ADC_1, STM_PIN_DATA(GPIO_Mode_AN, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF)}, // ADC_IN10
mbed_official 130:1dec54e4aec3 50 {PC_1, ADC_1, STM_PIN_DATA(GPIO_Mode_AN, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF)}, // ADC_IN11
mbed_official 240:9a7c54113eaf 51 {PC_2, ADC_1, STM_PIN_DATA(GPIO_Mode_AN, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF)}, // ADC_IN12
mbed_official 240:9a7c54113eaf 52 {PC_3, ADC_1, STM_PIN_DATA(GPIO_Mode_AN, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF)}, // ADC_IN13
mbed_official 240:9a7c54113eaf 53 {PC_4, ADC_1, STM_PIN_DATA(GPIO_Mode_AN, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF)}, // ADC_IN14
mbed_official 240:9a7c54113eaf 54 {PC_5, ADC_1, STM_PIN_DATA(GPIO_Mode_AN, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF)}, // ADC_IN15
mbed_official 130:1dec54e4aec3 55 {NC, NC, 0}
mbed_official 130:1dec54e4aec3 56 };
mbed_official 130:1dec54e4aec3 57
mbed_official 130:1dec54e4aec3 58 int adc_inited = 0;
mbed_official 130:1dec54e4aec3 59
mbed_official 130:1dec54e4aec3 60 void analogin_init(analogin_t *obj, PinName pin) {
mbed_official 130:1dec54e4aec3 61
mbed_official 130:1dec54e4aec3 62 ADC_TypeDef *adc;
mbed_official 130:1dec54e4aec3 63 ADC_InitTypeDef ADC_InitStructure;
mbed_official 130:1dec54e4aec3 64
mbed_official 130:1dec54e4aec3 65 // Get the peripheral name (ADC_1, ADC_2...) from the pin and assign it to the object
mbed_official 130:1dec54e4aec3 66 obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC);
mbed_official 227:7bd0639b8911 67 MBED_ASSERT(obj->adc != (ADCName)NC);
mbed_official 130:1dec54e4aec3 68
mbed_official 130:1dec54e4aec3 69 // Configure GPIO
mbed_official 130:1dec54e4aec3 70 pinmap_pinout(pin, PinMap_ADC);
mbed_official 130:1dec54e4aec3 71
mbed_official 130:1dec54e4aec3 72 // Save pin number for the read function
mbed_official 130:1dec54e4aec3 73 obj->pin = pin;
mbed_official 130:1dec54e4aec3 74
mbed_official 130:1dec54e4aec3 75 // The ADC initialization is done once
mbed_official 130:1dec54e4aec3 76 if (adc_inited == 0) {
mbed_official 130:1dec54e4aec3 77 adc_inited = 1;
mbed_official 130:1dec54e4aec3 78
mbed_official 130:1dec54e4aec3 79 // Get ADC registers structure address
mbed_official 130:1dec54e4aec3 80 adc = (ADC_TypeDef *)(obj->adc);
mbed_official 130:1dec54e4aec3 81
mbed_official 130:1dec54e4aec3 82 // Enable ADC clock
mbed_official 130:1dec54e4aec3 83 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
mbed_official 130:1dec54e4aec3 84
mbed_official 130:1dec54e4aec3 85 // Configure ADC
mbed_official 130:1dec54e4aec3 86 ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
mbed_official 227:7bd0639b8911 87 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
mbed_official 130:1dec54e4aec3 88 ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
mbed_official 130:1dec54e4aec3 89 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_TRGO;
mbed_official 130:1dec54e4aec3 90 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
mbed_official 130:1dec54e4aec3 91 ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
mbed_official 130:1dec54e4aec3 92 ADC_Init(adc, &ADC_InitStructure);
mbed_official 130:1dec54e4aec3 93
mbed_official 130:1dec54e4aec3 94 // Calibrate ADC
mbed_official 130:1dec54e4aec3 95 ADC_GetCalibrationFactor(adc);
mbed_official 130:1dec54e4aec3 96
mbed_official 130:1dec54e4aec3 97 // Enable ADC
mbed_official 130:1dec54e4aec3 98 ADC_Cmd(adc, ENABLE);
mbed_official 130:1dec54e4aec3 99 }
mbed_official 130:1dec54e4aec3 100 }
mbed_official 130:1dec54e4aec3 101
mbed_official 130:1dec54e4aec3 102 static inline uint16_t adc_read(analogin_t *obj) {
mbed_official 130:1dec54e4aec3 103 // Get ADC registers structure address
mbed_official 130:1dec54e4aec3 104 ADC_TypeDef *adc = (ADC_TypeDef *)(obj->adc);
mbed_official 130:1dec54e4aec3 105
mbed_official 130:1dec54e4aec3 106 adc->CHSELR = 0; // Clear all channels first
mbed_official 130:1dec54e4aec3 107
mbed_official 130:1dec54e4aec3 108 // Configure ADC channel
mbed_official 130:1dec54e4aec3 109 switch (obj->pin) {
mbed_official 130:1dec54e4aec3 110 case PA_0:
mbed_official 130:1dec54e4aec3 111 ADC_ChannelConfig(adc, ADC_Channel_0, ADC_SampleTime_7_5Cycles);
mbed_official 130:1dec54e4aec3 112 break;
mbed_official 130:1dec54e4aec3 113 case PA_1:
mbed_official 130:1dec54e4aec3 114 ADC_ChannelConfig(adc, ADC_Channel_1, ADC_SampleTime_7_5Cycles);
mbed_official 130:1dec54e4aec3 115 break;
mbed_official 240:9a7c54113eaf 116 case PA_2:
mbed_official 240:9a7c54113eaf 117 ADC_ChannelConfig(adc, ADC_Channel_2, ADC_SampleTime_7_5Cycles);
mbed_official 240:9a7c54113eaf 118 break;
mbed_official 240:9a7c54113eaf 119 case PA_3:
mbed_official 240:9a7c54113eaf 120 ADC_ChannelConfig(adc, ADC_Channel_3, ADC_SampleTime_7_5Cycles);
mbed_official 240:9a7c54113eaf 121 break;
mbed_official 130:1dec54e4aec3 122 case PA_4:
mbed_official 130:1dec54e4aec3 123 ADC_ChannelConfig(adc, ADC_Channel_4, ADC_SampleTime_7_5Cycles);
mbed_official 130:1dec54e4aec3 124 break;
mbed_official 240:9a7c54113eaf 125 case PA_5:
mbed_official 240:9a7c54113eaf 126 ADC_ChannelConfig(adc, ADC_Channel_5, ADC_SampleTime_7_5Cycles);
mbed_official 240:9a7c54113eaf 127 break;
mbed_official 240:9a7c54113eaf 128 case PA_6:
mbed_official 240:9a7c54113eaf 129 ADC_ChannelConfig(adc, ADC_Channel_6, ADC_SampleTime_7_5Cycles);
mbed_official 240:9a7c54113eaf 130 break;
mbed_official 240:9a7c54113eaf 131 case PA_7:
mbed_official 240:9a7c54113eaf 132 ADC_ChannelConfig(adc, ADC_Channel_7, ADC_SampleTime_7_5Cycles);
mbed_official 240:9a7c54113eaf 133 break;
mbed_official 130:1dec54e4aec3 134 case PB_0:
mbed_official 130:1dec54e4aec3 135 ADC_ChannelConfig(adc, ADC_Channel_8, ADC_SampleTime_7_5Cycles);
mbed_official 130:1dec54e4aec3 136 break;
mbed_official 240:9a7c54113eaf 137 case PB_1:
mbed_official 240:9a7c54113eaf 138 ADC_ChannelConfig(adc, ADC_Channel_9, ADC_SampleTime_7_5Cycles);
mbed_official 130:1dec54e4aec3 139 break;
mbed_official 130:1dec54e4aec3 140 case PC_0:
mbed_official 130:1dec54e4aec3 141 ADC_ChannelConfig(adc, ADC_Channel_10, ADC_SampleTime_7_5Cycles);
mbed_official 130:1dec54e4aec3 142 break;
mbed_official 240:9a7c54113eaf 143 case PC_1:
mbed_official 240:9a7c54113eaf 144 ADC_ChannelConfig(adc, ADC_Channel_11, ADC_SampleTime_7_5Cycles);
mbed_official 240:9a7c54113eaf 145 break;
mbed_official 240:9a7c54113eaf 146 case PC_2:
mbed_official 240:9a7c54113eaf 147 ADC_ChannelConfig(adc, ADC_Channel_12, ADC_SampleTime_7_5Cycles);
mbed_official 240:9a7c54113eaf 148 break;
mbed_official 240:9a7c54113eaf 149 case PC_3:
mbed_official 240:9a7c54113eaf 150 ADC_ChannelConfig(adc, ADC_Channel_13, ADC_SampleTime_7_5Cycles);
mbed_official 240:9a7c54113eaf 151 break;
mbed_official 240:9a7c54113eaf 152 case PC_4:
mbed_official 240:9a7c54113eaf 153 ADC_ChannelConfig(adc, ADC_Channel_14, ADC_SampleTime_7_5Cycles);
mbed_official 240:9a7c54113eaf 154 break;
mbed_official 240:9a7c54113eaf 155 case PC_5:
mbed_official 240:9a7c54113eaf 156 ADC_ChannelConfig(adc, ADC_Channel_15, ADC_SampleTime_7_5Cycles);
mbed_official 240:9a7c54113eaf 157 break;
mbed_official 130:1dec54e4aec3 158 default:
mbed_official 130:1dec54e4aec3 159 return 0;
mbed_official 130:1dec54e4aec3 160 }
mbed_official 130:1dec54e4aec3 161
mbed_official 240:9a7c54113eaf 162 while (!ADC_GetFlagStatus(adc, ADC_FLAG_ADRDY)); // Wait ADC ready
mbed_official 130:1dec54e4aec3 163
mbed_official 130:1dec54e4aec3 164 ADC_StartOfConversion(adc); // Start conversion
mbed_official 130:1dec54e4aec3 165
mbed_official 240:9a7c54113eaf 166 while (ADC_GetFlagStatus(adc, ADC_FLAG_EOC) == RESET); // Wait end of conversion
mbed_official 130:1dec54e4aec3 167
mbed_official 240:9a7c54113eaf 168 return (ADC_GetConversionValue(adc)); // Get conversion value
mbed_official 130:1dec54e4aec3 169 }
mbed_official 130:1dec54e4aec3 170
mbed_official 130:1dec54e4aec3 171 uint16_t analogin_read_u16(analogin_t *obj) {
mbed_official 240:9a7c54113eaf 172 return (adc_read(obj));
mbed_official 130:1dec54e4aec3 173 }
mbed_official 130:1dec54e4aec3 174
mbed_official 130:1dec54e4aec3 175 float analogin_read(analogin_t *obj) {
mbed_official 130:1dec54e4aec3 176 uint16_t value = adc_read(obj);
mbed_official 130:1dec54e4aec3 177 return (float)value * (1.0f / (float)0xFFF); // 12 bits range
mbed_official 130:1dec54e4aec3 178 }
mbed_official 130:1dec54e4aec3 179
mbed_official 130:1dec54e4aec3 180 #endif