mbed library sources. Supersedes mbed-src.

Fork of mbed-dev by mbed official

Committer:
fwndz
Date:
Thu Dec 22 05:12:40 2016 +0000
Revision:
153:9398a535854b
Parent:
149:156823d33999
device target maximize

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 15:a81a8d6c1dfe 1 /* mbed Microcontroller Library
mbed_official 15:a81a8d6c1dfe 2 * Copyright (c) 2006-2015 ARM Limited
mbed_official 15:a81a8d6c1dfe 3 *
mbed_official 15:a81a8d6c1dfe 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 15:a81a8d6c1dfe 5 * you may not use this file except in compliance with the License.
mbed_official 15:a81a8d6c1dfe 6 * You may obtain a copy of the License at
mbed_official 15:a81a8d6c1dfe 7 *
mbed_official 15:a81a8d6c1dfe 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 15:a81a8d6c1dfe 9 *
mbed_official 15:a81a8d6c1dfe 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 15:a81a8d6c1dfe 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 15:a81a8d6c1dfe 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 15:a81a8d6c1dfe 13 * See the License for the specific language governing permissions and
mbed_official 15:a81a8d6c1dfe 14 * limitations under the License.
mbed_official 15:a81a8d6c1dfe 15 */
mbed_official 15:a81a8d6c1dfe 16 #include "mbed_assert.h"
mbed_official 15:a81a8d6c1dfe 17 #include "analogout_api.h"
mbed_official 15:a81a8d6c1dfe 18
mbed_official 15:a81a8d6c1dfe 19 #include "cmsis.h"
mbed_official 15:a81a8d6c1dfe 20 #include "pinmap.h"
mbed_official 15:a81a8d6c1dfe 21 #include "PeripheralPins.h"
mbed_official 15:a81a8d6c1dfe 22 #include "dac.h"
mbed_official 15:a81a8d6c1dfe 23
mbed_official 15:a81a8d6c1dfe 24 struct dac_module dac_instance;
mbed_official 15:a81a8d6c1dfe 25 extern uint8_t g_sys_init;
mbed_official 15:a81a8d6c1dfe 26
mbed_official 15:a81a8d6c1dfe 27 #define MAX_VAL_10BIT 0x03FF
mbed_official 15:a81a8d6c1dfe 28
mbed_official 15:a81a8d6c1dfe 29 void analogout_init(dac_t *obj, PinName pin)
mbed_official 15:a81a8d6c1dfe 30 {
mbed_official 15:a81a8d6c1dfe 31 MBED_ASSERT(obj);
mbed_official 15:a81a8d6c1dfe 32 if (g_sys_init == 0) {
mbed_official 15:a81a8d6c1dfe 33 system_init();
mbed_official 15:a81a8d6c1dfe 34 g_sys_init = 1;
mbed_official 15:a81a8d6c1dfe 35 }
mbed_official 15:a81a8d6c1dfe 36
mbed_official 15:a81a8d6c1dfe 37 struct dac_config config_dac;
mbed_official 15:a81a8d6c1dfe 38 struct dac_chan_config config_dac_chan;
mbed_official 15:a81a8d6c1dfe 39 uint32_t pos_input;
mbed_official 15:a81a8d6c1dfe 40 pos_input = pinmap_find_peripheral(pin, PinMap_DAC);
mbed_official 15:a81a8d6c1dfe 41 MBED_ASSERT(pos_input != NC);
mbed_official 15:a81a8d6c1dfe 42
mbed_official 15:a81a8d6c1dfe 43 obj->dac = DAC_0;
mbed_official 15:a81a8d6c1dfe 44
mbed_official 15:a81a8d6c1dfe 45 dac_get_config_defaults(&config_dac);
mbed_official 15:a81a8d6c1dfe 46 dac_init(&dac_instance, (Dac *)DAC_0, &config_dac);
mbed_official 15:a81a8d6c1dfe 47
mbed_official 15:a81a8d6c1dfe 48 dac_chan_get_config_defaults(&config_dac_chan);
mbed_official 15:a81a8d6c1dfe 49 dac_chan_set_config(&dac_instance, DAC_CHANNEL_0, &config_dac_chan);
mbed_official 15:a81a8d6c1dfe 50 dac_chan_enable(&dac_instance, DAC_CHANNEL_0);
mbed_official 15:a81a8d6c1dfe 51
mbed_official 15:a81a8d6c1dfe 52 dac_enable(&dac_instance);
mbed_official 15:a81a8d6c1dfe 53 }
mbed_official 15:a81a8d6c1dfe 54
mbed_official 15:a81a8d6c1dfe 55 void analogout_free(dac_t *obj)
mbed_official 15:a81a8d6c1dfe 56 {
mbed_official 15:a81a8d6c1dfe 57 MBED_ASSERT(obj);
mbed_official 15:a81a8d6c1dfe 58 struct system_pinmux_config pin_conf;
mbed_official 15:a81a8d6c1dfe 59
mbed_official 15:a81a8d6c1dfe 60 dac_disable(&dac_instance);
mbed_official 15:a81a8d6c1dfe 61 pin_conf.direction = SYSTEM_PINMUX_PIN_DIR_INPUT;
mbed_official 15:a81a8d6c1dfe 62 pin_conf.input_pull = SYSTEM_PINMUX_PIN_PULL_UP;
mbed_official 15:a81a8d6c1dfe 63 pin_conf.powersave = false;
mbed_official 15:a81a8d6c1dfe 64 pin_conf.mux_position = SYSTEM_PINMUX_GPIO;
mbed_official 15:a81a8d6c1dfe 65 system_pinmux_pin_set_config(PA02, &pin_conf); /*PA02 is the only DAC pin available*/
mbed_official 15:a81a8d6c1dfe 66 }
mbed_official 15:a81a8d6c1dfe 67
mbed_official 15:a81a8d6c1dfe 68 void analogout_write(dac_t *obj, float value)
mbed_official 15:a81a8d6c1dfe 69 {
mbed_official 15:a81a8d6c1dfe 70 MBED_ASSERT(obj);
mbed_official 15:a81a8d6c1dfe 71 uint16_t count_val = 0;
mbed_official 15:a81a8d6c1dfe 72 if (value < 0.0f) {
mbed_official 15:a81a8d6c1dfe 73 count_val = 0;
mbed_official 15:a81a8d6c1dfe 74 } else if (value > 1.0f) {
mbed_official 15:a81a8d6c1dfe 75 count_val = MAX_VAL_10BIT;
mbed_official 15:a81a8d6c1dfe 76 } else {
mbed_official 15:a81a8d6c1dfe 77 count_val = (uint16_t)(value * (float)MAX_VAL_10BIT);
mbed_official 15:a81a8d6c1dfe 78 }
mbed_official 15:a81a8d6c1dfe 79 dac_chan_write(&dac_instance, DAC_CHANNEL_0, count_val);
mbed_official 15:a81a8d6c1dfe 80
mbed_official 15:a81a8d6c1dfe 81 }
mbed_official 15:a81a8d6c1dfe 82
mbed_official 15:a81a8d6c1dfe 83 void analogout_write_u16(dac_t *obj, uint16_t value)
mbed_official 15:a81a8d6c1dfe 84 {
mbed_official 15:a81a8d6c1dfe 85 MBED_ASSERT(obj);
mbed_official 15:a81a8d6c1dfe 86 uint16_t count_val;
mbed_official 15:a81a8d6c1dfe 87 count_val = (uint16_t)((value * (float)MAX_VAL_10BIT) / 0xFFFF); /*Normalization to the value 0xFFFF*/
mbed_official 15:a81a8d6c1dfe 88 dac_chan_write(&dac_instance, DAC_CHANNEL_0, count_val);
mbed_official 15:a81a8d6c1dfe 89
mbed_official 15:a81a8d6c1dfe 90 }
mbed_official 15:a81a8d6c1dfe 91
mbed_official 15:a81a8d6c1dfe 92 static uint32_t data_reg_read(dac_t *obj)
mbed_official 15:a81a8d6c1dfe 93 {
mbed_official 15:a81a8d6c1dfe 94 Dac *const dac_module = (Dac *)obj->dac;
mbed_official 15:a81a8d6c1dfe 95 return (uint32_t)dac_module->DATA.reg;
mbed_official 15:a81a8d6c1dfe 96 }
mbed_official 15:a81a8d6c1dfe 97
mbed_official 15:a81a8d6c1dfe 98 float analogout_read(dac_t *obj)
mbed_official 15:a81a8d6c1dfe 99 {
mbed_official 15:a81a8d6c1dfe 100 MBED_ASSERT(obj);
mbed_official 15:a81a8d6c1dfe 101 uint32_t data_val = data_reg_read(obj);
mbed_official 15:a81a8d6c1dfe 102 return data_val/(float)MAX_VAL_10BIT;
mbed_official 15:a81a8d6c1dfe 103 }
mbed_official 15:a81a8d6c1dfe 104
mbed_official 15:a81a8d6c1dfe 105 uint16_t analogout_read_u16(dac_t *obj)
mbed_official 15:a81a8d6c1dfe 106 {
mbed_official 15:a81a8d6c1dfe 107 MBED_ASSERT(obj);
mbed_official 15:a81a8d6c1dfe 108 uint32_t data_val = data_reg_read(obj);
mbed_official 15:a81a8d6c1dfe 109 return (uint16_t)((data_val / (float)MAX_VAL_10BIT) * 0xFFFF); /*Normalization to the value 0xFFFF*/
mbed_official 15:a81a8d6c1dfe 110 }