SDK Development / mbed-src

Fork of mbed-src by mbed official

Committer:
mbed_official
Date:
Thu Dec 26 13:00:06 2013 +0000
Revision:
68:41613245dfd7
Child:
73:299c67215126
Synchronized with git revision fba199a9c4445231b0f38e1e113c118182635546

Full URL: https://github.com/mbedmicro/mbed/commit/fba199a9c4445231b0f38e1e113c118182635546/

target K20D5M

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 68:41613245dfd7 1 /* mbed Microcontroller Library
mbed_official 68:41613245dfd7 2 * Copyright (c) 2006-2013 ARM Limited
mbed_official 68:41613245dfd7 3 *
mbed_official 68:41613245dfd7 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 68:41613245dfd7 5 * you may not use this file except in compliance with the License.
mbed_official 68:41613245dfd7 6 * You may obtain a copy of the License at
mbed_official 68:41613245dfd7 7 *
mbed_official 68:41613245dfd7 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 68:41613245dfd7 9 *
mbed_official 68:41613245dfd7 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 68:41613245dfd7 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 68:41613245dfd7 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 68:41613245dfd7 13 * See the License for the specific language governing permissions and
mbed_official 68:41613245dfd7 14 * limitations under the License.
mbed_official 68:41613245dfd7 15 */
mbed_official 68:41613245dfd7 16 #include "analogin_api.h"
mbed_official 68:41613245dfd7 17
mbed_official 68:41613245dfd7 18 #include "cmsis.h"
mbed_official 68:41613245dfd7 19 #include "pinmap.h"
mbed_official 68:41613245dfd7 20 #include "error.h"
mbed_official 68:41613245dfd7 21
mbed_official 68:41613245dfd7 22 static const PinMap PinMap_ADC[] = {
mbed_official 68:41613245dfd7 23 {PTC2, ADC0_SE4b, 0},
mbed_official 68:41613245dfd7 24 {PTD1, ADC0_SE5b, 0},
mbed_official 68:41613245dfd7 25 {PTD5, ADC0_SE6b, 0},
mbed_official 68:41613245dfd7 26 {PTD6, ADC0_SE7b, 0},
mbed_official 68:41613245dfd7 27 {PTB0, ADC0_SE8, 0},
mbed_official 68:41613245dfd7 28 {PTB1, ADC0_SE9, 0},
mbed_official 68:41613245dfd7 29 {PTB2, ADC0_SE12, 0},
mbed_official 68:41613245dfd7 30 {PTB3, ADC0_SE13, 0},
mbed_official 68:41613245dfd7 31 {PTC0, ADC0_SE14, 0},
mbed_official 68:41613245dfd7 32 {PTC1, ADC0_SE15, 0},
mbed_official 68:41613245dfd7 33 {NC, NC, 0}
mbed_official 68:41613245dfd7 34 };
mbed_official 68:41613245dfd7 35
mbed_official 68:41613245dfd7 36 void analogin_init(analogin_t *obj, PinName pin) {
mbed_official 68:41613245dfd7 37 obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC);
mbed_official 68:41613245dfd7 38 if (obj->adc == (ADCName)NC)
mbed_official 68:41613245dfd7 39 error("ADC pin mapping failed");
mbed_official 68:41613245dfd7 40
mbed_official 68:41613245dfd7 41 SIM->SCGC6 |= SIM_SCGC6_ADC0_MASK;
mbed_official 68:41613245dfd7 42
mbed_official 68:41613245dfd7 43 uint32_t port = (uint32_t)pin >> PORT_SHIFT;
mbed_official 68:41613245dfd7 44 SIM->SCGC5 |= 1 << (SIM_SCGC5_PORTA_SHIFT + port);
mbed_official 68:41613245dfd7 45
mbed_official 68:41613245dfd7 46 ADC0->SC1[1] = ADC_SC1_ADCH(obj->adc);
mbed_official 68:41613245dfd7 47
mbed_official 68:41613245dfd7 48 ADC0->CFG1 = ADC_CFG1_ADLPC_MASK // Low-Power Configuration
mbed_official 68:41613245dfd7 49 | ADC_CFG1_ADIV(3) // Clock Divide Select: (Input Clock)/8
mbed_official 68:41613245dfd7 50 | ADC_CFG1_ADLSMP_MASK // Long Sample Time
mbed_official 68:41613245dfd7 51 | ADC_CFG1_MODE(3) // (16)bits Resolution
mbed_official 68:41613245dfd7 52 | ADC_CFG1_ADICLK(1); // Input Clock: (Bus Clock)/2
mbed_official 68:41613245dfd7 53
mbed_official 68:41613245dfd7 54 ADC0->CFG2 = ADC_CFG2_MUXSEL_MASK // ADxxb or ADxxa channels
mbed_official 68:41613245dfd7 55 | ADC_CFG2_ADACKEN_MASK // Asynchronous Clock Output Enable
mbed_official 68:41613245dfd7 56 | ADC_CFG2_ADHSC_MASK // High-Speed Configuration
mbed_official 68:41613245dfd7 57 | ADC_CFG2_ADLSTS(0); // Long Sample Time Select
mbed_official 68:41613245dfd7 58
mbed_official 68:41613245dfd7 59 ADC0->SC2 = ADC_SC2_REFSEL(0); // Default Voltage Reference
mbed_official 68:41613245dfd7 60
mbed_official 68:41613245dfd7 61 ADC0->SC3 = ADC_SC3_AVGE_MASK // Hardware Average Enable
mbed_official 68:41613245dfd7 62 | ADC_SC3_AVGS(0); // 4 Samples Averaged
mbed_official 68:41613245dfd7 63
mbed_official 68:41613245dfd7 64 pinmap_pinout(pin, PinMap_ADC);
mbed_official 68:41613245dfd7 65 }
mbed_official 68:41613245dfd7 66
mbed_official 68:41613245dfd7 67 uint16_t analogin_read_u16(analogin_t *obj) {
mbed_official 68:41613245dfd7 68 // start conversion
mbed_official 68:41613245dfd7 69 ADC0->SC1[0] = ADC_SC1_ADCH(obj->adc);
mbed_official 68:41613245dfd7 70
mbed_official 68:41613245dfd7 71 // Wait Conversion Complete
mbed_official 68:41613245dfd7 72 while ((ADC0->SC1[0] & ADC_SC1_COCO_MASK) != ADC_SC1_COCO_MASK);
mbed_official 68:41613245dfd7 73
mbed_official 68:41613245dfd7 74 return (uint16_t)ADC0->R[0];
mbed_official 68:41613245dfd7 75 }
mbed_official 68:41613245dfd7 76
mbed_official 68:41613245dfd7 77 float analogin_read(analogin_t *obj) {
mbed_official 68:41613245dfd7 78 uint16_t value = analogin_read_u16(obj);
mbed_official 68:41613245dfd7 79 return (float)value * (1.0f / (float)0xFFFF);
mbed_official 68:41613245dfd7 80 }
mbed_official 68:41613245dfd7 81