t

Fork of mbed-dev by mbed official

Committer:
<>
Date:
Fri Oct 28 11:17:30 2016 +0100
Revision:
149:156823d33999
Parent:
targets/hal/TARGET_Atmel/TARGET_SAM_CortexM0P/drivers/dac/TARGET_SAML21/dac_feature.h@18:da299f395b9e
This updates the lib to the mbed lib v128

NOTE: This release includes a restructuring of the file and directory locations and thus some
include paths in your code may need updating accordingly.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 18:da299f395b9e 1 /**
mbed_official 18:da299f395b9e 2 * \file
mbed_official 18:da299f395b9e 3 *
mbed_official 18:da299f395b9e 4 * \brief SAM Peripheral Digital-to-Analog Converter Driver
mbed_official 18:da299f395b9e 5 *
mbed_official 18:da299f395b9e 6 * Copyright (C) 2014-2015 Atmel Corporation. All rights reserved.
mbed_official 18:da299f395b9e 7 *
mbed_official 18:da299f395b9e 8 * \asf_license_start
mbed_official 18:da299f395b9e 9 *
mbed_official 18:da299f395b9e 10 * \page License
mbed_official 18:da299f395b9e 11 *
mbed_official 18:da299f395b9e 12 * Redistribution and use in source and binary forms, with or without
mbed_official 18:da299f395b9e 13 * modification, are permitted provided that the following conditions are met:
mbed_official 18:da299f395b9e 14 *
mbed_official 18:da299f395b9e 15 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 18:da299f395b9e 16 * this list of conditions and the following disclaimer.
mbed_official 18:da299f395b9e 17 *
mbed_official 18:da299f395b9e 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 18:da299f395b9e 19 * this list of conditions and the following disclaimer in the documentation
mbed_official 18:da299f395b9e 20 * and/or other materials provided with the distribution.
mbed_official 18:da299f395b9e 21 *
mbed_official 18:da299f395b9e 22 * 3. The name of Atmel may not be used to endorse or promote products derived
mbed_official 18:da299f395b9e 23 * from this software without specific prior written permission.
mbed_official 18:da299f395b9e 24 *
mbed_official 18:da299f395b9e 25 * 4. This software may only be redistributed and used in connection with an
mbed_official 18:da299f395b9e 26 * Atmel microcontroller product.
mbed_official 18:da299f395b9e 27 *
mbed_official 18:da299f395b9e 28 * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
mbed_official 18:da299f395b9e 29 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
mbed_official 18:da299f395b9e 30 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
mbed_official 18:da299f395b9e 31 * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
mbed_official 18:da299f395b9e 32 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 18:da299f395b9e 33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
mbed_official 18:da299f395b9e 34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
mbed_official 18:da299f395b9e 35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
mbed_official 18:da299f395b9e 36 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
mbed_official 18:da299f395b9e 37 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
mbed_official 18:da299f395b9e 38 * POSSIBILITY OF SUCH DAMAGE.
mbed_official 18:da299f395b9e 39 *
mbed_official 18:da299f395b9e 40 * \asf_license_stop
mbed_official 18:da299f395b9e 41 *
mbed_official 18:da299f395b9e 42 */
mbed_official 18:da299f395b9e 43 /*
mbed_official 18:da299f395b9e 44 * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
mbed_official 18:da299f395b9e 45 */
mbed_official 18:da299f395b9e 46 #ifndef DAC_FEATURE_H_INCLUDED
mbed_official 18:da299f395b9e 47 #define DAC_FEATURE_H_INCLUDED
mbed_official 18:da299f395b9e 48
mbed_official 18:da299f395b9e 49 /**
mbed_official 18:da299f395b9e 50 * \defgroup asfdoc_sam0_dac_group SAM Digital-to-Analog (DAC) Driver
mbed_official 18:da299f395b9e 51 *
mbed_official 18:da299f395b9e 52 * This driver for Atmel&reg; | SMART ARM&reg;-based microcontrollers provides an interface for the conversion of
mbed_official 18:da299f395b9e 53 * digital values to analog voltage. The following driver API modes are covered
mbed_official 18:da299f395b9e 54 * by this manual:
mbed_official 18:da299f395b9e 55 *
mbed_official 18:da299f395b9e 56 * - Polled APIs
mbed_official 18:da299f395b9e 57 * \if DAC_CALLBACK_MODE
mbed_official 18:da299f395b9e 58 * - Callback APIs
mbed_official 18:da299f395b9e 59 * \endif
mbed_official 18:da299f395b9e 60 *
mbed_official 18:da299f395b9e 61 * The following peripheral is used by this module:
mbed_official 18:da299f395b9e 62 * - DAC (Digital-to-Analog Converter)
mbed_official 18:da299f395b9e 63 *
mbed_official 18:da299f395b9e 64 * The following devices can use this module:
mbed_official 18:da299f395b9e 65 * - Atmel | SMART SAM L21
mbed_official 18:da299f395b9e 66 *
mbed_official 18:da299f395b9e 67 * The outline of this documentation is as follows:
mbed_official 18:da299f395b9e 68 * - \ref asfdoc_sam0_dac_prerequisites
mbed_official 18:da299f395b9e 69 * - \ref asfdoc_sam0_dac_module_overview
mbed_official 18:da299f395b9e 70 * - \ref asfdoc_sam0_dac_special_considerations
mbed_official 18:da299f395b9e 71 * - \ref asfdoc_sam0_dac_extra_info
mbed_official 18:da299f395b9e 72 * - \ref asfdoc_sam0_dac_examples
mbed_official 18:da299f395b9e 73 * - \ref asfdoc_sam0_dac_api_overview
mbed_official 18:da299f395b9e 74 *
mbed_official 18:da299f395b9e 75 *
mbed_official 18:da299f395b9e 76 * \section asfdoc_sam0_dac_prerequisites Prerequisites
mbed_official 18:da299f395b9e 77 *
mbed_official 18:da299f395b9e 78 * There are no prerequisites for this module.
mbed_official 18:da299f395b9e 79 *
mbed_official 18:da299f395b9e 80 *
mbed_official 18:da299f395b9e 81 * \section asfdoc_sam0_dac_module_overview Module Overview
mbed_official 18:da299f395b9e 82 *
mbed_official 18:da299f395b9e 83 * The Digital-to-Analog converter converts a digital value to an analog voltage.
mbed_official 18:da299f395b9e 84 * The DAC Controller can operate as two independent DACs or as a single DAC
mbed_official 18:da299f395b9e 85 * in differential mode. Each DAC has a 12-bit resolution and it is capable of
mbed_official 18:da299f395b9e 86 * converting up to 1M samples per second (Msps).
mbed_official 18:da299f395b9e 87 *
mbed_official 18:da299f395b9e 88 * A common use of DAC is to generate audio signals by connecting the DAC
mbed_official 18:da299f395b9e 89 * output to a speaker, or to generate a reference voltage; either for an
mbed_official 18:da299f395b9e 90 * external circuit or an internal peripheral such as the Analog Comparator.
mbed_official 18:da299f395b9e 91 *
mbed_official 18:da299f395b9e 92 * After being set up, the DAC will convert new digital values written to the
mbed_official 18:da299f395b9e 93 * conversion data register (DATA0 or DATA1) to an analog value either on the
mbed_official 18:da299f395b9e 94 * DAC output (VOUT0 or VOUT1) pin of the device, or internally for use as an
mbed_official 18:da299f395b9e 95 * input to the AC, ADC, and other analog modules.
mbed_official 18:da299f395b9e 96 *
mbed_official 18:da299f395b9e 97 * Writing the DATA register will start a new conversion. It is also possible
mbed_official 18:da299f395b9e 98 * to trigger the conversion from the event system.
mbed_official 18:da299f395b9e 99 *
mbed_official 18:da299f395b9e 100 * A simplified block diagram of the DAC can be seen in
mbed_official 18:da299f395b9e 101 * \ref asfdoc_sam0_dac_module_block_diagram "the figure below".
mbed_official 18:da299f395b9e 102 *
mbed_official 18:da299f395b9e 103 * \anchor asfdoc_sam0_dac_module_block_diagram
mbed_official 18:da299f395b9e 104 * \image html dac_block_diagram_saml.svg "DAC Block Diagram"
mbed_official 18:da299f395b9e 105 *
mbed_official 18:da299f395b9e 106 * \subsection asfdoc_sam0_dac_conversion_range Conversion Range
mbed_official 18:da299f395b9e 107 * The conversion range is between GND and the selected voltage reference.
mbed_official 18:da299f395b9e 108 * Available voltage references are:
mbed_official 18:da299f395b9e 109 * \li Voltage supply (VDDANA)
mbed_official 18:da299f395b9e 110 * \li Internal bandgap reference (INTREF)
mbed_official 18:da299f395b9e 111 * \li Unbuffered External voltage reference (VREFPU)
mbed_official 18:da299f395b9e 112 * \li Buffered External voltage reference (VREFPB)
mbed_official 18:da299f395b9e 113 *
mbed_official 18:da299f395b9e 114 * \note Internal references will be enabled by the driver, but not disabled.
mbed_official 18:da299f395b9e 115 * Any reference not used by the application should be disabled by the application.
mbed_official 18:da299f395b9e 116 *
mbed_official 18:da299f395b9e 117 * The output voltage from a DAC channel is given as:
mbed_official 18:da299f395b9e 118 * \f[
mbed_official 18:da299f395b9e 119 * V_{OUTx} = \frac{DATAx}{0x3FF} \times VREF
mbed_official 18:da299f395b9e 120 * \f]
mbed_official 18:da299f395b9e 121 * The differential output voltage is given as:
mbed_official 18:da299f395b9e 122 * \f[
mbed_official 18:da299f395b9e 123 * V_{OUT} = \frac{DATA0}{0x1FF} \times VREF = (V_{OUT0}-V_{OUT1})
mbed_official 18:da299f395b9e 124 * \f]
mbed_official 18:da299f395b9e 125 *
mbed_official 18:da299f395b9e 126 * \subsection asfdoc_sam0_dac_conversion Conversion
mbed_official 18:da299f395b9e 127 * The conversion digital value written to the DATA register will be converted
mbed_official 18:da299f395b9e 128 * to an analog value. Writing the DATA register will start a new conversion.
mbed_official 18:da299f395b9e 129 * It is also possible to write the conversion value to the DATABUF register,
mbed_official 18:da299f395b9e 130 * the writing of the DATA register can then be triggered from the event
mbed_official 18:da299f395b9e 131 * system, which will load the value from DATABUF to DATA.
mbed_official 18:da299f395b9e 132 *
mbed_official 18:da299f395b9e 133 * \subsection asfdoc_sam0_dac_analog_output Analog Output
mbed_official 18:da299f395b9e 134 * The analog output value can be output to the VOUTx converted by DACx, and
mbed_official 18:da299f395b9e 135 * each data conversion can be started independently.
mbed_official 18:da299f395b9e 136 *
mbed_official 18:da299f395b9e 137 * In differential mode, DAC0 and DAC1 are operating synchronously to convert
mbed_official 18:da299f395b9e 138 * value. VOUT0 is the positive output and VOUT1 the negative output.
mbed_official 18:da299f395b9e 139 *
mbed_official 18:da299f395b9e 140 * VOUT0 signal is internally connected so that it can be used as input for
mbed_official 18:da299f395b9e 141 * AC, ADC, or OPAMP modules when DAC0 is enabled.
mbed_official 18:da299f395b9e 142 * \note The pin VOUT0 will be dedicated to internal input and cannot be
mbed_official 18:da299f395b9e 143 * configured as alternate function.
mbed_official 18:da299f395b9e 144 *
mbed_official 18:da299f395b9e 145 * \subsection asfdoc_sam0_dac_events Events
mbed_official 18:da299f395b9e 146 * Events generation and event actions are configurable in the DAC.
mbed_official 18:da299f395b9e 147 * The DAC has one event line input and one event output: <i>Start Conversion</i>
mbed_official 18:da299f395b9e 148 * and <i>Data Buffer Empty</i>.
mbed_official 18:da299f395b9e 149 *
mbed_official 18:da299f395b9e 150 * If the Start Conversion input event is enabled in the module configuration,
mbed_official 18:da299f395b9e 151 * an incoming event will load data from the data buffer to the data register
mbed_official 18:da299f395b9e 152 * and start a new conversion. This method synchronizes conversions with
mbed_official 18:da299f395b9e 153 * external events (such as those from a timer module) and ensures regular and
mbed_official 18:da299f395b9e 154 * fixed conversion intervals.
mbed_official 18:da299f395b9e 155 *
mbed_official 18:da299f395b9e 156 * If the Data Buffer Empty output event is enabled in the module configuration,
mbed_official 18:da299f395b9e 157 * events will be generated when the DAC data buffer register becomes empty and
mbed_official 18:da299f395b9e 158 * new data can be loaded to the buffer.
mbed_official 18:da299f395b9e 159 *
mbed_official 18:da299f395b9e 160 * \note The connection of events between modules requires the use of the
mbed_official 18:da299f395b9e 161 * \ref asfdoc_sam0_events_group "SAM Event System Driver (EVENTS)"
mbed_official 18:da299f395b9e 162 * to route output event of one module to the the input event of another.
mbed_official 18:da299f395b9e 163 * For more information on event routing, refer to the event driver
mbed_official 18:da299f395b9e 164 * documentation.
mbed_official 18:da299f395b9e 165 *
mbed_official 18:da299f395b9e 166 * \subsection asfdoc_sam0_dac_data_adjust Left and Right Adjusted Values
mbed_official 18:da299f395b9e 167 * The 12-bit input value to the DAC is contained in a 16-bit register. This
mbed_official 18:da299f395b9e 168 * can be configured to be either left or right adjusted. In
mbed_official 18:da299f395b9e 169 * \ref asfdoc_sam0_dac_module_adj_modes "the figure below" both options are
mbed_official 18:da299f395b9e 170 * shown, and the position of the most (MSB) and the least (LSB) significant bits
mbed_official 18:da299f395b9e 171 * are indicated. The unused bits should always be written to zero.
mbed_official 18:da299f395b9e 172 *
mbed_official 18:da299f395b9e 173 * \anchor asfdoc_sam0_dac_module_adj_modes
mbed_official 18:da299f395b9e 174 * \dot
mbed_official 18:da299f395b9e 175 * digraph {
mbed_official 18:da299f395b9e 176 * subgraph cluster_right {
mbed_official 18:da299f395b9e 177 * msbl [label="MSB", shape=none, group="msbl"];
mbed_official 18:da299f395b9e 178 * lsbl [label="LSB", shape=none];
mbed_official 18:da299f395b9e 179 * node [shape=none];
mbed_official 18:da299f395b9e 180 * color="white";
mbed_official 18:da299f395b9e 181 * reg_left [label=<
mbed_official 18:da299f395b9e 182 * <table cellspacing="0" cellpadding="2" width="100%">
mbed_official 18:da299f395b9e 183 * <tr>
mbed_official 18:da299f395b9e 184 * <td port="msb">15</td>
mbed_official 18:da299f395b9e 185 * <td>14</td>
mbed_official 18:da299f395b9e 186 * <td>13</td>
mbed_official 18:da299f395b9e 187 * <td>12</td>
mbed_official 18:da299f395b9e 188 * <td>11</td>
mbed_official 18:da299f395b9e 189 * <td>10</td>
mbed_official 18:da299f395b9e 190 * <td>9</td>
mbed_official 18:da299f395b9e 191 * <td>8</td>
mbed_official 18:da299f395b9e 192 * <td>7</td>
mbed_official 18:da299f395b9e 193 * <td>6</td>
mbed_official 18:da299f395b9e 194 * <td>5</td>
mbed_official 18:da299f395b9e 195 * <td port="lsb">4</td>
mbed_official 18:da299f395b9e 196 * <td>3</td>
mbed_official 18:da299f395b9e 197 * <td>2</td>
mbed_official 18:da299f395b9e 198 * <td>1</td>
mbed_official 18:da299f395b9e 199 * <td>0</td>
mbed_official 18:da299f395b9e 200 * </tr>
mbed_official 18:da299f395b9e 201 * <tr>
mbed_official 18:da299f395b9e 202 * <td COLSPAN="12"> DATA[11:0] </td>
mbed_official 18:da299f395b9e 203 * <td BGCOLOR="lightgray"> </td>
mbed_official 18:da299f395b9e 204 * <td BGCOLOR="lightgray"> </td>
mbed_official 18:da299f395b9e 205 * <td BGCOLOR="lightgray"> </td>
mbed_official 18:da299f395b9e 206 * <td BGCOLOR="lightgray"> </td>
mbed_official 18:da299f395b9e 207 * </tr>
mbed_official 18:da299f395b9e 208 * </table>
mbed_official 18:da299f395b9e 209 * >];
mbed_official 18:da299f395b9e 210 * msbl -> reg_left:msb:n;
mbed_official 18:da299f395b9e 211 * lsbl -> reg_left:lsb;
mbed_official 18:da299f395b9e 212 * label ="Left adjusted.\n";
mbed_official 18:da299f395b9e 213 * }
mbed_official 18:da299f395b9e 214 * subgraph cluster_left {
mbed_official 18:da299f395b9e 215 * rankdir=TB;
mbed_official 18:da299f395b9e 216 * msb [label="MSB", shape=none];
mbed_official 18:da299f395b9e 217 * lsb [label="LSB", shape=none];
mbed_official 18:da299f395b9e 218 * color="white";
mbed_official 18:da299f395b9e 219 * node [shape=none];
mbed_official 18:da299f395b9e 220 * reg_right [label=<
mbed_official 18:da299f395b9e 221 * <table cellspacing="0" cellpadding="2">
mbed_official 18:da299f395b9e 222 * <tr>
mbed_official 18:da299f395b9e 223 * <td>15</td>
mbed_official 18:da299f395b9e 224 * <td>14</td>
mbed_official 18:da299f395b9e 225 * <td>13</td>
mbed_official 18:da299f395b9e 226 * <td>12</td>
mbed_official 18:da299f395b9e 227 * <td port="msb">11</td>
mbed_official 18:da299f395b9e 228 * <td>10</td>
mbed_official 18:da299f395b9e 229 * <td>9</td>
mbed_official 18:da299f395b9e 230 * <td>8</td>
mbed_official 18:da299f395b9e 231 * <td>7</td>
mbed_official 18:da299f395b9e 232 * <td>6</td>
mbed_official 18:da299f395b9e 233 * <td>5</td>
mbed_official 18:da299f395b9e 234 * <td>4</td>
mbed_official 18:da299f395b9e 235 * <td>3</td>
mbed_official 18:da299f395b9e 236 * <td>2</td>
mbed_official 18:da299f395b9e 237 * <td>1</td>
mbed_official 18:da299f395b9e 238 * <td port="lsb">0</td>
mbed_official 18:da299f395b9e 239 * </tr>
mbed_official 18:da299f395b9e 240 * <tr>
mbed_official 18:da299f395b9e 241 * <td BGCOLOR="lightgray"></td>
mbed_official 18:da299f395b9e 242 * <td BGCOLOR="lightgray"></td>
mbed_official 18:da299f395b9e 243 * <td BGCOLOR="lightgray"></td>
mbed_official 18:da299f395b9e 244 * <td BGCOLOR="lightgray"></td>
mbed_official 18:da299f395b9e 245 * <td COLSPAN="12"> DATA[11:0] </td>
mbed_official 18:da299f395b9e 246 * </tr>
mbed_official 18:da299f395b9e 247 * </table>
mbed_official 18:da299f395b9e 248 * >];
mbed_official 18:da299f395b9e 249 * msb -> reg_right:msb;
mbed_official 18:da299f395b9e 250 * lsb -> reg_right:lsb:n;
mbed_official 18:da299f395b9e 251 * label = "Right adjusted.\n";
mbed_official 18:da299f395b9e 252 * graph [shape=none];
mbed_official 18:da299f395b9e 253 * }
mbed_official 18:da299f395b9e 254 * }
mbed_official 18:da299f395b9e 255 * \enddot
mbed_official 18:da299f395b9e 256 *
mbed_official 18:da299f395b9e 257 * \subsection asfdoc_sam0_dac_clk_sources Clock Sources
mbed_official 18:da299f395b9e 258 * The clock for the DAC interface (CLK_DAC) is generated by the Power Manager.
mbed_official 18:da299f395b9e 259 * This clock is turned on by default, and can be enabled and disabled in the
mbed_official 18:da299f395b9e 260 * Power Manager.
mbed_official 18:da299f395b9e 261 *
mbed_official 18:da299f395b9e 262 * Additionally, an asynchronous clock source (GCLK_DAC) is required.
mbed_official 18:da299f395b9e 263 * These clocks are normally disabled by default. The selected clock source
mbed_official 18:da299f395b9e 264 * must be enabled in the Power Manager before it can be used by the DAC.
mbed_official 18:da299f395b9e 265 * The DAC core operates asynchronously from the user interface and
mbed_official 18:da299f395b9e 266 * peripheral bus. As a consequence, the DAC needs two clock cycles of both
mbed_official 18:da299f395b9e 267 * CLK_DAC and GCLK_DAC to synchronize the values written to some of the
mbed_official 18:da299f395b9e 268 * control and data registers.
mbed_official 18:da299f395b9e 269 * The oscillator source for the GCLK_DAC clock is selected in the Supply
mbed_official 18:da299f395b9e 270 * Control Interface (SUPC).
mbed_official 18:da299f395b9e 271 *
mbed_official 18:da299f395b9e 272 * \section asfdoc_sam0_dac_special_considerations Special Considerations
mbed_official 18:da299f395b9e 273 *
mbed_official 18:da299f395b9e 274 * \subsection asfdoc_sam0_dac_special_considerations_sleep Sleep Mode
mbed_official 18:da299f395b9e 275 * The DAC can do conversions in Active or Idle modes, and will continue the
mbed_official 18:da299f395b9e 276 * conversions in standby sleep mode if the RUNSTDBY bit in the DACCTRLx
mbed_official 18:da299f395b9e 277 * register is set. Otherwise, the DACx will stop conversions.
mbed_official 18:da299f395b9e 278 *
mbed_official 18:da299f395b9e 279 * If DACx conversion is stopped in standby sleep mode, DACx is disabled to
mbed_official 18:da299f395b9e 280 * reduce power consumption. When exiting standby sleep mode, DACx is enabled
mbed_official 18:da299f395b9e 281 * therefore startup time is required before starting a new conversion.
mbed_official 18:da299f395b9e 282 *
mbed_official 18:da299f395b9e 283 * \subsection asfdoc_sam0_dac_special_considerations_conversion_time Conversion Time
mbed_official 18:da299f395b9e 284 * DAC conversion time is approximately 2.85µs. The user must ensure that new
mbed_official 18:da299f395b9e 285 * data is not written to the DAC before the last conversion is complete.
mbed_official 18:da299f395b9e 286 * Conversions should be triggered by a periodic event from a Timer/Counter or
mbed_official 18:da299f395b9e 287 * another peripheral.
mbed_official 18:da299f395b9e 288 *
mbed_official 18:da299f395b9e 289 *
mbed_official 18:da299f395b9e 290 * \section asfdoc_sam0_dac_extra_info Extra Information
mbed_official 18:da299f395b9e 291 *
mbed_official 18:da299f395b9e 292 * For extra information, see \ref asfdoc_sam0_dac_extra. This includes:
mbed_official 18:da299f395b9e 293 * - \ref asfdoc_sam0_dac_extra_acronyms
mbed_official 18:da299f395b9e 294 * - \ref asfdoc_sam0_dac_extra_dependencies
mbed_official 18:da299f395b9e 295 * - \ref asfdoc_sam0_dac_extra_errata
mbed_official 18:da299f395b9e 296 * - \ref asfdoc_sam0_dac_extra_history
mbed_official 18:da299f395b9e 297 *
mbed_official 18:da299f395b9e 298 *
mbed_official 18:da299f395b9e 299 * \section asfdoc_sam0_dac_examples Examples
mbed_official 18:da299f395b9e 300 *
mbed_official 18:da299f395b9e 301 * For a list of examples related to this driver, see
mbed_official 18:da299f395b9e 302 * \ref asfdoc_sam0_dac_exqsg.
mbed_official 18:da299f395b9e 303 *
mbed_official 18:da299f395b9e 304 *
mbed_official 18:da299f395b9e 305 * \section asfdoc_sam0_dac_api_overview API Overview
mbed_official 18:da299f395b9e 306 * @{
mbed_official 18:da299f395b9e 307 */
mbed_official 18:da299f395b9e 308
mbed_official 18:da299f395b9e 309 #ifdef __cplusplus
mbed_official 18:da299f395b9e 310 extern "C" {
mbed_official 18:da299f395b9e 311 #endif
mbed_official 18:da299f395b9e 312
mbed_official 18:da299f395b9e 313 #include <compiler.h>
mbed_official 18:da299f395b9e 314 #include <clock.h>
mbed_official 18:da299f395b9e 315 #include <gclk.h>
mbed_official 18:da299f395b9e 316
mbed_official 18:da299f395b9e 317
mbed_official 18:da299f395b9e 318 /**
mbed_official 18:da299f395b9e 319 * \name DAC Status Flags
mbed_official 18:da299f395b9e 320 *
mbed_official 18:da299f395b9e 321 * DAC status flags, returned by \ref dac_get_status() and cleared by
mbed_official 18:da299f395b9e 322 * \ref dac_clear_status().
mbed_official 18:da299f395b9e 323 * @{
mbed_official 18:da299f395b9e 324 */
mbed_official 18:da299f395b9e 325
mbed_official 18:da299f395b9e 326 /** Data Buffer Empty Channel 0 - Set when data is transferred from DATABUF
mbed_official 18:da299f395b9e 327 * to DATA by a start conversion event and DATABUF is ready for new data.
mbed_official 18:da299f395b9e 328 */
mbed_official 18:da299f395b9e 329 #define DAC_STATUS_CHANNEL_0_EMPTY (1UL << 0)
mbed_official 18:da299f395b9e 330
mbed_official 18:da299f395b9e 331 /** Data Buffer Empty Channel 1 - Set when data is transferred from DATABUF
mbed_official 18:da299f395b9e 332 * to DATA by a start conversion event and DATABUF is ready for new data.
mbed_official 18:da299f395b9e 333 */
mbed_official 18:da299f395b9e 334 #define DAC_STATUS_CHANNEL_1_EMPTY (1UL << 1)
mbed_official 18:da299f395b9e 335
mbed_official 18:da299f395b9e 336 /** Underrun Channel 0 - Set when a start conversion event occurs when
mbed_official 18:da299f395b9e 337 * DATABUF is empty.
mbed_official 18:da299f395b9e 338 */
mbed_official 18:da299f395b9e 339 #define DAC_STATUS_CHANNEL_0_UNDERRUN (1UL << 2)
mbed_official 18:da299f395b9e 340
mbed_official 18:da299f395b9e 341 /** Underrun Channel 1 - Set when a start conversion event occurs when
mbed_official 18:da299f395b9e 342 * DATABUF is empty.
mbed_official 18:da299f395b9e 343 */
mbed_official 18:da299f395b9e 344 #define DAC_STATUS_CHANNEL_1_UNDERRUN (1UL << 3)
mbed_official 18:da299f395b9e 345
mbed_official 18:da299f395b9e 346 /** @} */
mbed_official 18:da299f395b9e 347
mbed_official 18:da299f395b9e 348 /**
mbed_official 18:da299f395b9e 349 * \brief DAC reference voltage enum.
mbed_official 18:da299f395b9e 350 *
mbed_official 18:da299f395b9e 351 * Enum for the possible reference voltages for the DAC.
mbed_official 18:da299f395b9e 352 */
mbed_official 18:da299f395b9e 353 enum dac_reference {
mbed_official 18:da299f395b9e 354 /** Unbuffered external voltage reference */
mbed_official 18:da299f395b9e 355 DAC_REFERENCE_VREFPU = DAC_CTRLB_REFSEL(0),
mbed_official 18:da299f395b9e 356 /** Analog VCC as reference */
mbed_official 18:da299f395b9e 357 DAC_REFERENCE_VDDANA = DAC_CTRLB_REFSEL(1),
mbed_official 18:da299f395b9e 358 /** Buffered external voltage reference */
mbed_official 18:da299f395b9e 359 DAC_REFERENCE_VREFPB = DAC_CTRLB_REFSEL(2),
mbed_official 18:da299f395b9e 360 /** Internal bandgap reference */
mbed_official 18:da299f395b9e 361 DAC_REFERENCE_INTREF = DAC_CTRLB_REFSEL(3),
mbed_official 18:da299f395b9e 362 };
mbed_official 18:da299f395b9e 363
mbed_official 18:da299f395b9e 364 /**
mbed_official 18:da299f395b9e 365 * \brief DAC current control enum.
mbed_official 18:da299f395b9e 366 *
mbed_official 18:da299f395b9e 367 * Enum for the current in output buffer according the conversion rate.
mbed_official 18:da299f395b9e 368 */
mbed_official 18:da299f395b9e 369 enum dac_current_ctrl {
mbed_official 18:da299f395b9e 370 /** 1MHz < GCLK_DAC < 12MHz */
mbed_official 18:da299f395b9e 371 DAC_CURRENT_12M = DAC_DACCTRL_CCTRL(0),
mbed_official 18:da299f395b9e 372 /** 100KHz < GCLK_DAC < 1MHz */
mbed_official 18:da299f395b9e 373 DAC_CURRENT_1M = DAC_DACCTRL_CCTRL(1),
mbed_official 18:da299f395b9e 374 /** 10KHz < GCLK_DAC < 100KHz */
mbed_official 18:da299f395b9e 375 DAC_CURRENT_100K = DAC_DACCTRL_CCTRL(2),
mbed_official 18:da299f395b9e 376 /** GCLK_DAC < 10KHz */
mbed_official 18:da299f395b9e 377 DAC_CURRENT_10K = DAC_DACCTRL_CCTRL(3),
mbed_official 18:da299f395b9e 378 };
mbed_official 18:da299f395b9e 379
mbed_official 18:da299f395b9e 380 /**
mbed_official 18:da299f395b9e 381 * \brief DAC channel selection enum.
mbed_official 18:da299f395b9e 382 *
mbed_official 18:da299f395b9e 383 * Enum for the DAC channel selection.
mbed_official 18:da299f395b9e 384 */
mbed_official 18:da299f395b9e 385 enum dac_channel {
mbed_official 18:da299f395b9e 386 /** DAC output channel 0 */
mbed_official 18:da299f395b9e 387 DAC_CHANNEL_0,
mbed_official 18:da299f395b9e 388 /** DAC output channel 1 */
mbed_official 18:da299f395b9e 389 DAC_CHANNEL_1,
mbed_official 18:da299f395b9e 390 #if !defined(__DOXYGEN__)
mbed_official 18:da299f395b9e 391 DAC_CHANNEL_N,
mbed_official 18:da299f395b9e 392 #endif
mbed_official 18:da299f395b9e 393 };
mbed_official 18:da299f395b9e 394
mbed_official 18:da299f395b9e 395 /**
mbed_official 18:da299f395b9e 396 * \brief DAC software device instance structure.
mbed_official 18:da299f395b9e 397 *
mbed_official 18:da299f395b9e 398 * DAC software instance structure, used to retain software state information
mbed_official 18:da299f395b9e 399 * of an associated hardware module instance.
mbed_official 18:da299f395b9e 400 *
mbed_official 18:da299f395b9e 401 * \note The fields of this structure should not be altered by the user
mbed_official 18:da299f395b9e 402 * application; they are reserved for module-internal use only.
mbed_official 18:da299f395b9e 403 */
mbed_official 18:da299f395b9e 404 struct dac_module {
mbed_official 18:da299f395b9e 405 #if !defined(__DOXYGEN__)
mbed_official 18:da299f395b9e 406 /** DAC hardware module */
mbed_official 18:da299f395b9e 407 Dac *hw;
mbed_official 18:da299f395b9e 408 /** Reference selection */
mbed_official 18:da299f395b9e 409 enum dac_reference reference;
mbed_official 18:da299f395b9e 410 /** DAC event selection */
mbed_official 18:da299f395b9e 411 bool start_on_event[DAC_CHANNEL_N];
mbed_official 18:da299f395b9e 412 # if DAC_CALLBACK_MODE == true
mbed_official 18:da299f395b9e 413 /** Pointer to buffer used for ADC results */
mbed_official 18:da299f395b9e 414 volatile uint16_t *job_buffer[DAC_CHANNEL_N];
mbed_official 18:da299f395b9e 415 /** Remaining number of conversions in current job */
mbed_official 18:da299f395b9e 416 volatile uint16_t remaining_conversions[DAC_CHANNEL_N];
mbed_official 18:da299f395b9e 417 /** Transferred number of conversions in current job */
mbed_official 18:da299f395b9e 418 volatile uint16_t transferred_conversions[DAC_CHANNEL_N];
mbed_official 18:da299f395b9e 419 /** DAC callback enable */
mbed_official 18:da299f395b9e 420 bool callback_enable[DAC_CHANNEL_N][DAC_CALLBACK_N];
mbed_official 18:da299f395b9e 421 /** DAC registered callback functions */
mbed_official 18:da299f395b9e 422 dac_callback_t callback[DAC_CHANNEL_N][DAC_CALLBACK_N];
mbed_official 18:da299f395b9e 423 /** Holds the status of the ongoing or last conversion job */
mbed_official 18:da299f395b9e 424 volatile enum status_code job_status[DAC_CHANNEL_N];
mbed_official 18:da299f395b9e 425 # endif
mbed_official 18:da299f395b9e 426 #endif
mbed_official 18:da299f395b9e 427 };
mbed_official 18:da299f395b9e 428
mbed_official 18:da299f395b9e 429 /**
mbed_official 18:da299f395b9e 430 * \brief DAC configuration structure.
mbed_official 18:da299f395b9e 431 *
mbed_official 18:da299f395b9e 432 * Configuration structure for a DAC instance. This structure should be
mbed_official 18:da299f395b9e 433 * initialized by the \ref dac_get_config_defaults()
mbed_official 18:da299f395b9e 434 * function before being modified by the user application.
mbed_official 18:da299f395b9e 435 */
mbed_official 18:da299f395b9e 436 struct dac_config {
mbed_official 18:da299f395b9e 437 /** Differential mode enable data */
mbed_official 18:da299f395b9e 438 bool differential_mode;
mbed_official 18:da299f395b9e 439 /** Reference voltage */
mbed_official 18:da299f395b9e 440 enum dac_reference reference;
mbed_official 18:da299f395b9e 441 /** GCLK generator used to clock the peripheral */
mbed_official 18:da299f395b9e 442 enum gclk_generator clock_source;
mbed_official 18:da299f395b9e 443 };
mbed_official 18:da299f395b9e 444
mbed_official 18:da299f395b9e 445 /**
mbed_official 18:da299f395b9e 446 * \brief DAC channel configuration structure.
mbed_official 18:da299f395b9e 447 *
mbed_official 18:da299f395b9e 448 * Configuration for a DAC channel. This structure should be initialized by the
mbed_official 18:da299f395b9e 449 * \ref dac_chan_get_config_defaults() function before being modified by the
mbed_official 18:da299f395b9e 450 * user application.
mbed_official 18:da299f395b9e 451 */
mbed_official 18:da299f395b9e 452 struct dac_chan_config {
mbed_official 18:da299f395b9e 453 /** Left adjusted data */
mbed_official 18:da299f395b9e 454 bool left_adjust;
mbed_official 18:da299f395b9e 455 /** Current control data */
mbed_official 18:da299f395b9e 456 enum dac_current_ctrl current;
mbed_official 18:da299f395b9e 457 /**
mbed_official 18:da299f395b9e 458 * The DAC behaves as in normal mode when the chip enters STANDBY sleep
mbed_official 18:da299f395b9e 459 * mode
mbed_official 18:da299f395b9e 460 */
mbed_official 18:da299f395b9e 461 bool run_in_standby;
mbed_official 18:da299f395b9e 462 /** Dither mode enable data */
mbed_official 18:da299f395b9e 463 bool dither_mode;
mbed_official 18:da299f395b9e 464 /**
mbed_official 18:da299f395b9e 465 * The DAC conversion refreshed periodically when used to generate a static
mbed_official 18:da299f395b9e 466 * voltage
mbed_official 18:da299f395b9e 467 */
mbed_official 18:da299f395b9e 468 uint8_t refresh_period;
mbed_official 18:da299f395b9e 469 };
mbed_official 18:da299f395b9e 470
mbed_official 18:da299f395b9e 471 /**
mbed_official 18:da299f395b9e 472 * \brief DAC event enable/disable structure.
mbed_official 18:da299f395b9e 473 *
mbed_official 18:da299f395b9e 474 * Event flags for the DAC module. This is used to enable and
mbed_official 18:da299f395b9e 475 * disable events via \ref dac_enable_events() and \ref dac_disable_events().
mbed_official 18:da299f395b9e 476 */
mbed_official 18:da299f395b9e 477 struct dac_events {
mbed_official 18:da299f395b9e 478 /** Start a new DAC0 conversion */
mbed_official 18:da299f395b9e 479 bool on_event_chan0_start_conversion;
mbed_official 18:da299f395b9e 480 /** Start a new DAC1 conversion */
mbed_official 18:da299f395b9e 481 bool on_event_chan1_start_conversion;
mbed_official 18:da299f395b9e 482 /** Enable event generation on DAC0 data buffer empty */
mbed_official 18:da299f395b9e 483 bool generate_event_on_chan0_buffer_empty;
mbed_official 18:da299f395b9e 484 /** Enable event generation on DAC1 data buffer empty */
mbed_official 18:da299f395b9e 485 bool generate_event_on_chan1_buffer_empty;
mbed_official 18:da299f395b9e 486 /** Enable the falling edge of the input event for DAC0 */
mbed_official 18:da299f395b9e 487 bool generate_event_on_chan0_falling_edge;
mbed_official 18:da299f395b9e 488 /** Enable the falling edge of the input event for DAC1 */
mbed_official 18:da299f395b9e 489 bool generate_event_on_chan1_falling_edge;
mbed_official 18:da299f395b9e 490 };
mbed_official 18:da299f395b9e 491
mbed_official 18:da299f395b9e 492 /**
mbed_official 18:da299f395b9e 493 * \name Status Management (Channel)
mbed_official 18:da299f395b9e 494 * @{
mbed_official 18:da299f395b9e 495 */
mbed_official 18:da299f395b9e 496 bool dac_chan_is_end_of_conversion(
mbed_official 18:da299f395b9e 497 struct dac_module *const module_inst,
mbed_official 18:da299f395b9e 498 enum dac_channel channel);
mbed_official 18:da299f395b9e 499 /** @} */
mbed_official 18:da299f395b9e 500
mbed_official 18:da299f395b9e 501 /** @} */
mbed_official 18:da299f395b9e 502
mbed_official 18:da299f395b9e 503 /**
mbed_official 18:da299f395b9e 504 * \page asfdoc_sam0_dac_extra Extra Information for DAC Driver
mbed_official 18:da299f395b9e 505 *
mbed_official 18:da299f395b9e 506 * \section asfdoc_sam0_dac_extra_acronyms Acronyms
mbed_official 18:da299f395b9e 507 * The table below presents the acronyms used in this module:
mbed_official 18:da299f395b9e 508 *
mbed_official 18:da299f395b9e 509 * <table>
mbed_official 18:da299f395b9e 510 * <tr>
mbed_official 18:da299f395b9e 511 * <th>Acronym</th>
mbed_official 18:da299f395b9e 512 * <th>Description</th>
mbed_official 18:da299f395b9e 513 * </tr>
mbed_official 18:da299f395b9e 514 * <tr>
mbed_official 18:da299f395b9e 515 * <td>ADC</td>
mbed_official 18:da299f395b9e 516 * <td>Analog-to-Digital Converter</td>
mbed_official 18:da299f395b9e 517 * </tr>
mbed_official 18:da299f395b9e 518 * <tr>
mbed_official 18:da299f395b9e 519 * <td>AC</td>
mbed_official 18:da299f395b9e 520 * <td>Analog Comparator</td>
mbed_official 18:da299f395b9e 521 * </tr>
mbed_official 18:da299f395b9e 522 * <tr>
mbed_official 18:da299f395b9e 523 * <td>DAC</td>
mbed_official 18:da299f395b9e 524 * <td>Digital-to-Analog Converter</td>
mbed_official 18:da299f395b9e 525 * </tr>
mbed_official 18:da299f395b9e 526 * <tr>
mbed_official 18:da299f395b9e 527 * <td>LSB</td>
mbed_official 18:da299f395b9e 528 * <td>Least Significant Bit</td>
mbed_official 18:da299f395b9e 529 * </tr>
mbed_official 18:da299f395b9e 530 * <tr>
mbed_official 18:da299f395b9e 531 * <td>MSB</td>
mbed_official 18:da299f395b9e 532 * <td>Most Significant Bit</td>
mbed_official 18:da299f395b9e 533 * </tr>
mbed_official 18:da299f395b9e 534 * <tr>
mbed_official 18:da299f395b9e 535 * <td>DMA</td>
mbed_official 18:da299f395b9e 536 * <td>Direct Memory Access</td>
mbed_official 18:da299f395b9e 537 * </tr>
mbed_official 18:da299f395b9e 538 * </table>
mbed_official 18:da299f395b9e 539 *
mbed_official 18:da299f395b9e 540 *
mbed_official 18:da299f395b9e 541 * \section asfdoc_sam0_dac_extra_dependencies Dependencies
mbed_official 18:da299f395b9e 542 * This driver has the following dependency:
mbed_official 18:da299f395b9e 543 *
mbed_official 18:da299f395b9e 544 * - \ref asfdoc_sam0_system_pinmux_group "System Pin Multiplexer Driver"
mbed_official 18:da299f395b9e 545 *
mbed_official 18:da299f395b9e 546 *
mbed_official 18:da299f395b9e 547 * \section asfdoc_sam0_dac_extra_errata Errata
mbed_official 18:da299f395b9e 548 * There are no errata related to this driver.
mbed_official 18:da299f395b9e 549 *
mbed_official 18:da299f395b9e 550 *
mbed_official 18:da299f395b9e 551 * \section asfdoc_sam0_dac_extra_history Module History
mbed_official 18:da299f395b9e 552 * An overview of the module history is presented in the table below, with
mbed_official 18:da299f395b9e 553 * details on the enhancements and fixes made to the module since its first
mbed_official 18:da299f395b9e 554 * release. The current version of this corresponds to the newest version in
mbed_official 18:da299f395b9e 555 * the table.
mbed_official 18:da299f395b9e 556 *
mbed_official 18:da299f395b9e 557 * <table>
mbed_official 18:da299f395b9e 558 * <tr>
mbed_official 18:da299f395b9e 559 * <th>Changelog</th>
mbed_official 18:da299f395b9e 560 * </tr>
mbed_official 18:da299f395b9e 561 * <tr>
mbed_official 18:da299f395b9e 562 * <td>Initial Release</td>
mbed_official 18:da299f395b9e 563 * </tr>
mbed_official 18:da299f395b9e 564 * </table>
mbed_official 18:da299f395b9e 565 */
mbed_official 18:da299f395b9e 566
mbed_official 18:da299f395b9e 567 /**
mbed_official 18:da299f395b9e 568 * \page asfdoc_sam0_dac_exqsg Examples for DAC Driver
mbed_official 18:da299f395b9e 569 *
mbed_official 18:da299f395b9e 570 * This is a list of the available Quick Start guides (QSGs) and example
mbed_official 18:da299f395b9e 571 * applications for \ref asfdoc_sam0_dac_group. QSGs are simple examples with
mbed_official 18:da299f395b9e 572 * step-by-step instructions to configure and use this driver in a selection of
mbed_official 18:da299f395b9e 573 * use cases. Note that a QSG can be compiled as a standalone application or be
mbed_official 18:da299f395b9e 574 * added to the user application.
mbed_official 18:da299f395b9e 575 *
mbed_official 18:da299f395b9e 576 * - \subpage asfdoc_sam0_dac_basic_use_case
mbed_official 18:da299f395b9e 577 * \if DAC_CALLBACK_MODE
mbed_official 18:da299f395b9e 578 * - \subpage asfdoc_sam0_dac_basic_use_case_callback
mbed_official 18:da299f395b9e 579 * \endif
mbed_official 18:da299f395b9e 580 * \if DAC_DMA_USE_MODE_SELECTION
mbed_official 18:da299f395b9e 581 * - \subpage asfdoc_sam0_adc_dma_use_case_dac_in_dma
mbed_official 18:da299f395b9e 582 * \endif
mbed_official 18:da299f395b9e 583 *
mbed_official 18:da299f395b9e 584 * \if DAC_DMA_USE_MODE_SELECTION
mbed_official 18:da299f395b9e 585 * \page asfdoc_sam0_adc_dma_use_case_dac_in_dma Quick Start Guide for Using DMA with ADC/DAC
mbed_official 18:da299f395b9e 586 * For this examples, see
mbed_official 18:da299f395b9e 587 * \ref asfdoc_sam0_adc_dma_use_case
mbed_official 18:da299f395b9e 588 * \endif
mbed_official 18:da299f395b9e 589 *
mbed_official 18:da299f395b9e 590 * \page asfdoc_sam0_dac_document_revision_history Document Revision History
mbed_official 18:da299f395b9e 591 *
mbed_official 18:da299f395b9e 592 * <table>
mbed_official 18:da299f395b9e 593 * <tr>
mbed_official 18:da299f395b9e 594 * <th>Doc. Rev.</td>
mbed_official 18:da299f395b9e 595 * <th>Date</td>
mbed_official 18:da299f395b9e 596 * <th>Comments</td>
mbed_official 18:da299f395b9e 597 * </tr>
mbed_official 18:da299f395b9e 598 * <tr>
mbed_official 18:da299f395b9e 599 * <td>42450A</td>
mbed_official 18:da299f395b9e 600 * <td>07/2015</td>
mbed_official 18:da299f395b9e 601 * <td>Initial document release</td>
mbed_official 18:da299f395b9e 602 * </tr>
mbed_official 18:da299f395b9e 603 * </table>
mbed_official 18:da299f395b9e 604 */
mbed_official 18:da299f395b9e 605 #ifdef __cplusplus
mbed_official 18:da299f395b9e 606 }
mbed_official 18:da299f395b9e 607 #endif
mbed_official 18:da299f395b9e 608
mbed_official 18:da299f395b9e 609
mbed_official 18:da299f395b9e 610 #endif /* DAC_FEATURE_H_INCLUDED */
mbed_official 18:da299f395b9e 611