Nathan Yonkee / Mbed 2 deprecated Nucleo_sinewave_output_copy

Dependencies:   mbed

Committer:
Nathan Yonkee
Date:
Fri Mar 02 07:12:37 2018 -0700
Revision:
9:d58e77ebd769
add mbed-os library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nathan Yonkee 9:d58e77ebd769 1 /* mbed Microcontroller Library
Nathan Yonkee 9:d58e77ebd769 2 * Copyright (c) 2006-2013 ARM Limited
Nathan Yonkee 9:d58e77ebd769 3 *
Nathan Yonkee 9:d58e77ebd769 4 * Licensed under the Apache License, Version 2.0 (the "License");
Nathan Yonkee 9:d58e77ebd769 5 * you may not use this file except in compliance with the License.
Nathan Yonkee 9:d58e77ebd769 6 * You may obtain a copy of the License at
Nathan Yonkee 9:d58e77ebd769 7 *
Nathan Yonkee 9:d58e77ebd769 8 * http://www.apache.org/licenses/LICENSE-2.0
Nathan Yonkee 9:d58e77ebd769 9 *
Nathan Yonkee 9:d58e77ebd769 10 * Unless required by applicable law or agreed to in writing, software
Nathan Yonkee 9:d58e77ebd769 11 * distributed under the License is distributed on an "AS IS" BASIS,
Nathan Yonkee 9:d58e77ebd769 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Nathan Yonkee 9:d58e77ebd769 13 * See the License for the specific language governing permissions and
Nathan Yonkee 9:d58e77ebd769 14 * limitations under the License.
Nathan Yonkee 9:d58e77ebd769 15 */
Nathan Yonkee 9:d58e77ebd769 16 #ifndef MBED_ANALOGOUT_H
Nathan Yonkee 9:d58e77ebd769 17 #define MBED_ANALOGOUT_H
Nathan Yonkee 9:d58e77ebd769 18
Nathan Yonkee 9:d58e77ebd769 19 #include "platform/platform.h"
Nathan Yonkee 9:d58e77ebd769 20
Nathan Yonkee 9:d58e77ebd769 21 #if defined (DEVICE_ANALOGOUT) || defined(DOXYGEN_ONLY)
Nathan Yonkee 9:d58e77ebd769 22
Nathan Yonkee 9:d58e77ebd769 23 #include "hal/analogout_api.h"
Nathan Yonkee 9:d58e77ebd769 24 #include "platform/PlatformMutex.h"
Nathan Yonkee 9:d58e77ebd769 25
Nathan Yonkee 9:d58e77ebd769 26 namespace mbed {
Nathan Yonkee 9:d58e77ebd769 27 /** \addtogroup drivers */
Nathan Yonkee 9:d58e77ebd769 28
Nathan Yonkee 9:d58e77ebd769 29 /** An analog output, used for setting the voltage on a pin
Nathan Yonkee 9:d58e77ebd769 30 *
Nathan Yonkee 9:d58e77ebd769 31 * @note Synchronization level: Thread safe
Nathan Yonkee 9:d58e77ebd769 32 *
Nathan Yonkee 9:d58e77ebd769 33 * Example:
Nathan Yonkee 9:d58e77ebd769 34 * @code
Nathan Yonkee 9:d58e77ebd769 35 * // Make a sawtooth output
Nathan Yonkee 9:d58e77ebd769 36 *
Nathan Yonkee 9:d58e77ebd769 37 * #include "mbed.h"
Nathan Yonkee 9:d58e77ebd769 38 *
Nathan Yonkee 9:d58e77ebd769 39 * AnalogOut tri(p18);
Nathan Yonkee 9:d58e77ebd769 40 * int main() {
Nathan Yonkee 9:d58e77ebd769 41 * while(1) {
Nathan Yonkee 9:d58e77ebd769 42 * tri = tri + 0.01;
Nathan Yonkee 9:d58e77ebd769 43 * wait_us(1);
Nathan Yonkee 9:d58e77ebd769 44 * if(tri == 1) {
Nathan Yonkee 9:d58e77ebd769 45 * tri = 0;
Nathan Yonkee 9:d58e77ebd769 46 * }
Nathan Yonkee 9:d58e77ebd769 47 * }
Nathan Yonkee 9:d58e77ebd769 48 * }
Nathan Yonkee 9:d58e77ebd769 49 * @endcode
Nathan Yonkee 9:d58e77ebd769 50 * @ingroup drivers
Nathan Yonkee 9:d58e77ebd769 51 */
Nathan Yonkee 9:d58e77ebd769 52 class AnalogOut {
Nathan Yonkee 9:d58e77ebd769 53
Nathan Yonkee 9:d58e77ebd769 54 public:
Nathan Yonkee 9:d58e77ebd769 55
Nathan Yonkee 9:d58e77ebd769 56 /** Create an AnalogOut connected to the specified pin
Nathan Yonkee 9:d58e77ebd769 57 *
Nathan Yonkee 9:d58e77ebd769 58 * @param pin AnalogOut pin to connect to
Nathan Yonkee 9:d58e77ebd769 59 */
Nathan Yonkee 9:d58e77ebd769 60 AnalogOut(PinName pin) {
Nathan Yonkee 9:d58e77ebd769 61 analogout_init(&_dac, pin);
Nathan Yonkee 9:d58e77ebd769 62 }
Nathan Yonkee 9:d58e77ebd769 63
Nathan Yonkee 9:d58e77ebd769 64 /** Set the output voltage, specified as a percentage (float)
Nathan Yonkee 9:d58e77ebd769 65 *
Nathan Yonkee 9:d58e77ebd769 66 * @param value A floating-point value representing the output voltage,
Nathan Yonkee 9:d58e77ebd769 67 * specified as a percentage. The value should lie between
Nathan Yonkee 9:d58e77ebd769 68 * 0.0f (representing 0v / 0%) and 1.0f (representing 3.3v / 100%).
Nathan Yonkee 9:d58e77ebd769 69 * Values outside this range will be saturated to 0.0f or 1.0f.
Nathan Yonkee 9:d58e77ebd769 70 */
Nathan Yonkee 9:d58e77ebd769 71 void write(float value) {
Nathan Yonkee 9:d58e77ebd769 72 lock();
Nathan Yonkee 9:d58e77ebd769 73 analogout_write(&_dac, value);
Nathan Yonkee 9:d58e77ebd769 74 unlock();
Nathan Yonkee 9:d58e77ebd769 75 }
Nathan Yonkee 9:d58e77ebd769 76
Nathan Yonkee 9:d58e77ebd769 77 /** Set the output voltage, represented as an unsigned short in the range [0x0, 0xFFFF]
Nathan Yonkee 9:d58e77ebd769 78 *
Nathan Yonkee 9:d58e77ebd769 79 * @param value 16-bit unsigned short representing the output voltage,
Nathan Yonkee 9:d58e77ebd769 80 * normalised to a 16-bit value (0x0000 = 0v, 0xFFFF = 3.3v)
Nathan Yonkee 9:d58e77ebd769 81 */
Nathan Yonkee 9:d58e77ebd769 82 void write_u16(unsigned short value) {
Nathan Yonkee 9:d58e77ebd769 83 lock();
Nathan Yonkee 9:d58e77ebd769 84 analogout_write_u16(&_dac, value);
Nathan Yonkee 9:d58e77ebd769 85 unlock();
Nathan Yonkee 9:d58e77ebd769 86 }
Nathan Yonkee 9:d58e77ebd769 87
Nathan Yonkee 9:d58e77ebd769 88 /** Return the current output voltage setting, measured as a percentage (float)
Nathan Yonkee 9:d58e77ebd769 89 *
Nathan Yonkee 9:d58e77ebd769 90 * @returns
Nathan Yonkee 9:d58e77ebd769 91 * A floating-point value representing the current voltage being output on the pin,
Nathan Yonkee 9:d58e77ebd769 92 * measured as a percentage. The returned value will lie between
Nathan Yonkee 9:d58e77ebd769 93 * 0.0f (representing 0v / 0%) and 1.0f (representing 3.3v / 100%).
Nathan Yonkee 9:d58e77ebd769 94 *
Nathan Yonkee 9:d58e77ebd769 95 * @note
Nathan Yonkee 9:d58e77ebd769 96 * This value may not match exactly the value set by a previous write().
Nathan Yonkee 9:d58e77ebd769 97 */
Nathan Yonkee 9:d58e77ebd769 98 float read() {
Nathan Yonkee 9:d58e77ebd769 99 lock();
Nathan Yonkee 9:d58e77ebd769 100 float ret = analogout_read(&_dac);
Nathan Yonkee 9:d58e77ebd769 101 unlock();
Nathan Yonkee 9:d58e77ebd769 102 return ret;
Nathan Yonkee 9:d58e77ebd769 103 }
Nathan Yonkee 9:d58e77ebd769 104
Nathan Yonkee 9:d58e77ebd769 105 /** An operator shorthand for write()
Nathan Yonkee 9:d58e77ebd769 106 * \sa AnalogOut::write()
Nathan Yonkee 9:d58e77ebd769 107 */
Nathan Yonkee 9:d58e77ebd769 108 AnalogOut& operator= (float percent) {
Nathan Yonkee 9:d58e77ebd769 109 // Underlying write call is thread safe
Nathan Yonkee 9:d58e77ebd769 110 write(percent);
Nathan Yonkee 9:d58e77ebd769 111 return *this;
Nathan Yonkee 9:d58e77ebd769 112 }
Nathan Yonkee 9:d58e77ebd769 113
Nathan Yonkee 9:d58e77ebd769 114 /** An operator shorthand for write()
Nathan Yonkee 9:d58e77ebd769 115 * \sa AnalogOut::write()
Nathan Yonkee 9:d58e77ebd769 116 */
Nathan Yonkee 9:d58e77ebd769 117 AnalogOut& operator= (AnalogOut& rhs) {
Nathan Yonkee 9:d58e77ebd769 118 // Underlying write call is thread safe
Nathan Yonkee 9:d58e77ebd769 119 write(rhs.read());
Nathan Yonkee 9:d58e77ebd769 120 return *this;
Nathan Yonkee 9:d58e77ebd769 121 }
Nathan Yonkee 9:d58e77ebd769 122
Nathan Yonkee 9:d58e77ebd769 123 /** An operator shorthand for read()
Nathan Yonkee 9:d58e77ebd769 124 * \sa AnalogOut::read()
Nathan Yonkee 9:d58e77ebd769 125 */
Nathan Yonkee 9:d58e77ebd769 126 operator float() {
Nathan Yonkee 9:d58e77ebd769 127 // Underlying read call is thread safe
Nathan Yonkee 9:d58e77ebd769 128 return read();
Nathan Yonkee 9:d58e77ebd769 129 }
Nathan Yonkee 9:d58e77ebd769 130
Nathan Yonkee 9:d58e77ebd769 131 virtual ~AnalogOut() {
Nathan Yonkee 9:d58e77ebd769 132 // Do nothing
Nathan Yonkee 9:d58e77ebd769 133 }
Nathan Yonkee 9:d58e77ebd769 134
Nathan Yonkee 9:d58e77ebd769 135 dac_t _dac;
Nathan Yonkee 9:d58e77ebd769 136 protected:
Nathan Yonkee 9:d58e77ebd769 137
Nathan Yonkee 9:d58e77ebd769 138 virtual void lock() {
Nathan Yonkee 9:d58e77ebd769 139 _mutex.lock();
Nathan Yonkee 9:d58e77ebd769 140 }
Nathan Yonkee 9:d58e77ebd769 141
Nathan Yonkee 9:d58e77ebd769 142 virtual void unlock() {
Nathan Yonkee 9:d58e77ebd769 143 _mutex.unlock();
Nathan Yonkee 9:d58e77ebd769 144 }
Nathan Yonkee 9:d58e77ebd769 145
Nathan Yonkee 9:d58e77ebd769 146 PlatformMutex _mutex;
Nathan Yonkee 9:d58e77ebd769 147 };
Nathan Yonkee 9:d58e77ebd769 148
Nathan Yonkee 9:d58e77ebd769 149 } // namespace mbed
Nathan Yonkee 9:d58e77ebd769 150
Nathan Yonkee 9:d58e77ebd769 151 #endif
Nathan Yonkee 9:d58e77ebd769 152
Nathan Yonkee 9:d58e77ebd769 153 #endif