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:
Thu Apr 03 11:45:06 2014 +0100
Revision:
149:1fb5f62b92bd
Parent:
targets/hal/TARGET_Freescale/TARGET_KSDK_MCUS/TARGET_K64F/analogout_api.c@146:f64d43ff0c18
Child:
250:a49055e7a707
Synchronized with git revision 220c0bb39ceee40016e1e86350c058963d01ed42

Full URL: https://github.com/mbedmicro/mbed/commit/220c0bb39ceee40016e1e86350c058963d01ed42/

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 146:f64d43ff0c18 1 /* mbed Microcontroller Library
mbed_official 146:f64d43ff0c18 2 * Copyright (c) 2006-2013 ARM Limited
mbed_official 146:f64d43ff0c18 3 *
mbed_official 146:f64d43ff0c18 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 146:f64d43ff0c18 5 * you may not use this file except in compliance with the License.
mbed_official 146:f64d43ff0c18 6 * You may obtain a copy of the License at
mbed_official 146:f64d43ff0c18 7 *
mbed_official 146:f64d43ff0c18 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 146:f64d43ff0c18 9 *
mbed_official 146:f64d43ff0c18 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 146:f64d43ff0c18 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 146:f64d43ff0c18 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 146:f64d43ff0c18 13 * See the License for the specific language governing permissions and
mbed_official 146:f64d43ff0c18 14 * limitations under the License.
mbed_official 146:f64d43ff0c18 15 */
mbed_official 146:f64d43ff0c18 16 #include "analogout_api.h"
mbed_official 146:f64d43ff0c18 17
mbed_official 146:f64d43ff0c18 18 #include "cmsis.h"
mbed_official 146:f64d43ff0c18 19 #include "pinmap.h"
mbed_official 146:f64d43ff0c18 20 #include "error.h"
mbed_official 146:f64d43ff0c18 21
mbed_official 146:f64d43ff0c18 22 #define RANGE_12BIT 0xFFF
mbed_official 146:f64d43ff0c18 23
mbed_official 146:f64d43ff0c18 24 const PinMap PinMap_DAC[] = {
mbed_official 146:f64d43ff0c18 25 {DAC0_OUT, DAC_0, 0},
mbed_official 146:f64d43ff0c18 26 {NC , NC , 0}
mbed_official 146:f64d43ff0c18 27 };
mbed_official 146:f64d43ff0c18 28
mbed_official 146:f64d43ff0c18 29 void analogout_init(dac_t *obj, PinName pin) {
mbed_official 146:f64d43ff0c18 30 obj->dac = (DACName)pinmap_peripheral(pin, PinMap_DAC);
mbed_official 146:f64d43ff0c18 31 if (obj->dac == (DACName)NC) {
mbed_official 146:f64d43ff0c18 32 error("DAC pin mapping failed");
mbed_official 146:f64d43ff0c18 33 }
mbed_official 146:f64d43ff0c18 34
mbed_official 146:f64d43ff0c18 35 SIM->SCGC2 |= SIM_SCGC2_DAC0_MASK;
mbed_official 146:f64d43ff0c18 36
mbed_official 146:f64d43ff0c18 37 DAC0->DAT[obj->dac].DATH = 0;
mbed_official 146:f64d43ff0c18 38 DAC0->DAT[obj->dac].DATL = 0;
mbed_official 146:f64d43ff0c18 39
mbed_official 146:f64d43ff0c18 40 DAC0->C1 = DAC_C1_DACBFMD(2); // One-Time Scan Mode
mbed_official 146:f64d43ff0c18 41
mbed_official 146:f64d43ff0c18 42 DAC0->C0 = DAC_C0_DACEN_MASK // Enable
mbed_official 146:f64d43ff0c18 43 | DAC_C0_DACSWTRG_MASK // Software Trigger
mbed_official 146:f64d43ff0c18 44 | DAC_C0_DACRFS_MASK; // VDDA selected
mbed_official 146:f64d43ff0c18 45
mbed_official 146:f64d43ff0c18 46 analogout_write_u16(obj, 0);
mbed_official 146:f64d43ff0c18 47 }
mbed_official 146:f64d43ff0c18 48
mbed_official 146:f64d43ff0c18 49 void analogout_free(dac_t *obj) {}
mbed_official 146:f64d43ff0c18 50
mbed_official 146:f64d43ff0c18 51 static inline void dac_write(dac_t *obj, int value) {
mbed_official 146:f64d43ff0c18 52 DAC0->DAT[obj->dac].DATL = (uint8_t)( value & 0xFF);
mbed_official 146:f64d43ff0c18 53 DAC0->DAT[obj->dac].DATH = (uint8_t)((value >> 8) & 0xFF);
mbed_official 146:f64d43ff0c18 54 }
mbed_official 146:f64d43ff0c18 55
mbed_official 146:f64d43ff0c18 56 static inline int dac_read(dac_t *obj) {
mbed_official 146:f64d43ff0c18 57 return ((DAC0->DAT[obj->dac].DATH << 8) | DAC0->DAT[obj->dac].DATL);
mbed_official 146:f64d43ff0c18 58 }
mbed_official 146:f64d43ff0c18 59
mbed_official 146:f64d43ff0c18 60 void analogout_write(dac_t *obj, float value) {
mbed_official 146:f64d43ff0c18 61 if (value < 0.0f) {
mbed_official 146:f64d43ff0c18 62 dac_write(obj, 0);
mbed_official 146:f64d43ff0c18 63 } else if (value > 1.0f) {
mbed_official 146:f64d43ff0c18 64 dac_write(obj, RANGE_12BIT);
mbed_official 146:f64d43ff0c18 65 } else {
mbed_official 146:f64d43ff0c18 66 dac_write(obj, value * (float)RANGE_12BIT);
mbed_official 146:f64d43ff0c18 67 }
mbed_official 146:f64d43ff0c18 68 }
mbed_official 146:f64d43ff0c18 69
mbed_official 146:f64d43ff0c18 70 void analogout_write_u16(dac_t *obj, uint16_t value) {
mbed_official 146:f64d43ff0c18 71 dac_write(obj, value >> 4); // 12-bit
mbed_official 146:f64d43ff0c18 72 }
mbed_official 146:f64d43ff0c18 73
mbed_official 146:f64d43ff0c18 74 float analogout_read(dac_t *obj) {
mbed_official 146:f64d43ff0c18 75 uint32_t value = dac_read(obj);
mbed_official 146:f64d43ff0c18 76 return (float)value * (1.0f / (float)RANGE_12BIT);
mbed_official 146:f64d43ff0c18 77 }
mbed_official 146:f64d43ff0c18 78
mbed_official 146:f64d43ff0c18 79 uint16_t analogout_read_u16(dac_t *obj) {
mbed_official 146:f64d43ff0c18 80 uint32_t value = dac_read(obj); // 12-bit
mbed_official 146:f64d43ff0c18 81 return (value << 4) | ((value >> 8) & 0x003F);
mbed_official 146:f64d43ff0c18 82 }