Mbed for VNG board

Fork of mbed-src by mbed official

Committer:
mbed_official
Date:
Tue Nov 25 07:15:09 2014 +0000
Revision:
414:4ec4c5b614b0
Parent:
330:c80ac197fa6a
Synchronized with git revision fbc74e874ac089c6cb05add312fb5422be628886

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

Targets: NUCLEOs - Add PeripheralPins files for all nucleo targets

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 125:23cc3068a9e4 1 /* mbed Microcontroller Library
mbed_official 125:23cc3068a9e4 2 * Copyright (c) 2014, STMicroelectronics
mbed_official 125:23cc3068a9e4 3 * All rights reserved.
mbed_official 125:23cc3068a9e4 4 *
mbed_official 125:23cc3068a9e4 5 * Redistribution and use in source and binary forms, with or without
mbed_official 125:23cc3068a9e4 6 * modification, are permitted provided that the following conditions are met:
mbed_official 125:23cc3068a9e4 7 *
mbed_official 125:23cc3068a9e4 8 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 125:23cc3068a9e4 9 * this list of conditions and the following disclaimer.
mbed_official 125:23cc3068a9e4 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 125:23cc3068a9e4 11 * this list of conditions and the following disclaimer in the documentation
mbed_official 125:23cc3068a9e4 12 * and/or other materials provided with the distribution.
mbed_official 125:23cc3068a9e4 13 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 125:23cc3068a9e4 14 * may be used to endorse or promote products derived from this software
mbed_official 125:23cc3068a9e4 15 * without specific prior written permission.
mbed_official 125:23cc3068a9e4 16 *
mbed_official 125:23cc3068a9e4 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 125:23cc3068a9e4 18 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 125:23cc3068a9e4 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 125:23cc3068a9e4 20 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 125:23cc3068a9e4 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 125:23cc3068a9e4 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 125:23cc3068a9e4 23 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 125:23cc3068a9e4 24 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 125:23cc3068a9e4 25 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 125:23cc3068a9e4 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 125:23cc3068a9e4 27 */
mbed_official 227:7bd0639b8911 28 #include "mbed_assert.h"
mbed_official 125:23cc3068a9e4 29 #include "analogout_api.h"
mbed_official 125:23cc3068a9e4 30
mbed_official 125:23cc3068a9e4 31 #if DEVICE_ANALOGOUT
mbed_official 125:23cc3068a9e4 32
mbed_official 125:23cc3068a9e4 33 #include "cmsis.h"
mbed_official 125:23cc3068a9e4 34 #include "pinmap.h"
mbed_official 330:c80ac197fa6a 35 #include "mbed_error.h"
mbed_official 414:4ec4c5b614b0 36 #include "PeripheralPins.h"
mbed_official 125:23cc3068a9e4 37
mbed_official 159:3b23f6d9ecb9 38 #define DAC_RANGE (0xFFF) // 12 bits
mbed_official 125:23cc3068a9e4 39
mbed_official 330:c80ac197fa6a 40 static DAC_HandleTypeDef DacHandle;
mbed_official 125:23cc3068a9e4 41
mbed_official 330:c80ac197fa6a 42 void analogout_init(dac_t *obj, PinName pin)
mbed_official 330:c80ac197fa6a 43 {
mbed_official 330:c80ac197fa6a 44 DAC_ChannelConfTypeDef sConfig;
mbed_official 330:c80ac197fa6a 45
mbed_official 330:c80ac197fa6a 46 // Get the peripheral name from the pin and assign it to the object
mbed_official 125:23cc3068a9e4 47 obj->dac = (DACName)pinmap_peripheral(pin, PinMap_DAC);
mbed_official 227:7bd0639b8911 48 MBED_ASSERT(obj->dac != (DACName)NC);
mbed_official 125:23cc3068a9e4 49
mbed_official 125:23cc3068a9e4 50 // Configure GPIO
mbed_official 125:23cc3068a9e4 51 pinmap_pinout(pin, PinMap_DAC);
mbed_official 125:23cc3068a9e4 52
mbed_official 330:c80ac197fa6a 53 // Save the pin for future use
mbed_official 216:577900467c9e 54 obj->pin = pin;
mbed_official 125:23cc3068a9e4 55
mbed_official 125:23cc3068a9e4 56 // Enable DAC clock
mbed_official 330:c80ac197fa6a 57 __DAC1_CLK_ENABLE();
mbed_official 330:c80ac197fa6a 58
mbed_official 330:c80ac197fa6a 59 // Configure DAC
mbed_official 330:c80ac197fa6a 60 DacHandle.Instance = (DAC_TypeDef *)(obj->dac);
mbed_official 125:23cc3068a9e4 61
mbed_official 330:c80ac197fa6a 62 sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
mbed_official 330:c80ac197fa6a 63 sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE;
mbed_official 330:c80ac197fa6a 64
mbed_official 330:c80ac197fa6a 65 HAL_DAC_ConfigChannel(&DacHandle, &sConfig, DAC_CHANNEL_1);
mbed_official 125:23cc3068a9e4 66
mbed_official 125:23cc3068a9e4 67 analogout_write_u16(obj, 0);
mbed_official 125:23cc3068a9e4 68 }
mbed_official 125:23cc3068a9e4 69
mbed_official 330:c80ac197fa6a 70 void analogout_free(dac_t *obj)
mbed_official 330:c80ac197fa6a 71 {
mbed_official 330:c80ac197fa6a 72 // Reset DAC and disable clock
mbed_official 330:c80ac197fa6a 73 __DAC1_FORCE_RESET();
mbed_official 330:c80ac197fa6a 74 __DAC1_RELEASE_RESET();
mbed_official 330:c80ac197fa6a 75 __DAC1_CLK_DISABLE();
mbed_official 330:c80ac197fa6a 76
mbed_official 159:3b23f6d9ecb9 77 // Configure GPIO
mbed_official 330:c80ac197fa6a 78 pin_function(obj->pin, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
mbed_official 125:23cc3068a9e4 79 }
mbed_official 125:23cc3068a9e4 80
mbed_official 330:c80ac197fa6a 81 static inline void dac_write(dac_t *obj, uint16_t value)
mbed_official 330:c80ac197fa6a 82 {
mbed_official 330:c80ac197fa6a 83 HAL_DAC_SetValue(&DacHandle, DAC_CHANNEL_1, DAC_ALIGN_12B_R, value);
mbed_official 330:c80ac197fa6a 84 HAL_DAC_Start(&DacHandle, DAC_CHANNEL_1);
mbed_official 125:23cc3068a9e4 85 }
mbed_official 125:23cc3068a9e4 86
mbed_official 330:c80ac197fa6a 87 static inline int dac_read(dac_t *obj)
mbed_official 330:c80ac197fa6a 88 {
mbed_official 330:c80ac197fa6a 89 return (int)HAL_DAC_GetValue(&DacHandle, DAC_CHANNEL_1);
mbed_official 125:23cc3068a9e4 90 }
mbed_official 125:23cc3068a9e4 91
mbed_official 330:c80ac197fa6a 92 void analogout_write(dac_t *obj, float value)
mbed_official 330:c80ac197fa6a 93 {
mbed_official 125:23cc3068a9e4 94 if (value < 0.0f) {
mbed_official 125:23cc3068a9e4 95 dac_write(obj, 0); // Min value
mbed_official 125:23cc3068a9e4 96 } else if (value > 1.0f) {
mbed_official 159:3b23f6d9ecb9 97 dac_write(obj, (uint16_t)DAC_RANGE); // Max value
mbed_official 125:23cc3068a9e4 98 } else {
mbed_official 159:3b23f6d9ecb9 99 dac_write(obj, (uint16_t)(value * (float)DAC_RANGE));
mbed_official 125:23cc3068a9e4 100 }
mbed_official 125:23cc3068a9e4 101 }
mbed_official 125:23cc3068a9e4 102
mbed_official 330:c80ac197fa6a 103 void analogout_write_u16(dac_t *obj, uint16_t value)
mbed_official 330:c80ac197fa6a 104 {
mbed_official 159:3b23f6d9ecb9 105 if (value > (uint16_t)DAC_RANGE) {
mbed_official 159:3b23f6d9ecb9 106 dac_write(obj, (uint16_t)DAC_RANGE); // Max value
mbed_official 135:067cc8ba23da 107 } else {
mbed_official 135:067cc8ba23da 108 dac_write(obj, value);
mbed_official 125:23cc3068a9e4 109 }
mbed_official 125:23cc3068a9e4 110 }
mbed_official 125:23cc3068a9e4 111
mbed_official 330:c80ac197fa6a 112 float analogout_read(dac_t *obj)
mbed_official 330:c80ac197fa6a 113 {
mbed_official 125:23cc3068a9e4 114 uint32_t value = dac_read(obj);
mbed_official 159:3b23f6d9ecb9 115 return (float)((float)value * (1.0f / (float)DAC_RANGE));
mbed_official 125:23cc3068a9e4 116 }
mbed_official 125:23cc3068a9e4 117
mbed_official 330:c80ac197fa6a 118 uint16_t analogout_read_u16(dac_t *obj)
mbed_official 330:c80ac197fa6a 119 {
mbed_official 125:23cc3068a9e4 120 return (uint16_t)dac_read(obj);
mbed_official 125:23cc3068a9e4 121 }
mbed_official 125:23cc3068a9e4 122
mbed_official 125:23cc3068a9e4 123 #endif // DEVICE_ANALOGOUT