1 /** 2 * \file 3 * 4 * \brief SAM Peripheral Digital-to-Analog Converter Driver 5 * 6 * Copyright (C) 2012-2016 Atmel Corporation. All rights reserved. 7 * 8 * \asf_license_start 9 * 10 * \page License 11 * 12 * Redistribution and use in source and binary forms, with or without 13 * modification, are permitted provided that the following conditions are met: 14 * 15 * 1. Redistributions of source code must retain the above copyright notice, 16 * this list of conditions and the following disclaimer. 17 * 18 * 2. Redistributions in binary form must reproduce the above copyright notice, 19 * this list of conditions and the following disclaimer in the documentation 20 * and/or other materials provided with the distribution. 21 * 22 * 3. The name of Atmel may not be used to endorse or promote products derived 23 * from this software without specific prior written permission. 24 * 25 * 4. This software may only be redistributed and used in connection with an 26 * Atmel microcontroller product. 27 * 28 * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED 29 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 30 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE 31 * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR 32 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 36 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 37 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 38 * POSSIBILITY OF SUCH DAMAGE. 39 * 40 * \asf_license_stop 41 * 42 */ 43 /* 44 * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a> 45 */ 46 #ifndef DAC_H_INCLUDED 47 #define DAC_H_INCLUDED 48 49 50 #ifdef __cplusplus 51 extern "C" { 52 #endif 53 54 #include <compiler.h> 55 #include <clock.h> 56 #include <gclk.h> 57 58 /** 59 * \addtogroup asfdoc_sam0_dac_group 60 * 61 * @{ 62 */ 63 64 /** 65 * Define DAC features set according to different device families. 66 * @{ 67 */ 68 #if (SAMD21 || SAMD10 || SAMD11 || SAMDA1 || SAMHA1) 69 # define FEATURE_DAC_DATABUF_WRITE_PROTECTION 70 #endif 71 /**@}*/ 72 73 #ifndef DAC_TIMEOUT 74 # define DAC_TIMEOUT 0xFFFF 75 #endif 76 77 #if DAC_CALLBACK_MODE == true 78 # include <system_interrupt.h> 79 80 /** Forward definition of the device instance. */ 81 struct dac_module; 82 83 #if !defined(__DOXYGEN__) 84 extern struct dac_module *_dac_instances[DAC_INST_NUM]; 85 #endif 86 87 /** Type definition for a DAC module callback function. */ 88 typedef void (*dac_callback_t)(uint8_t channel); 89 90 /** Enum for the possible callback types for the DAC module. */ 91 enum dac_callback { 92 /** Callback type for when a DAC channel data empty condition occurs 93 * (requires event triggered mode) */ 94 DAC_CALLBACK_DATA_EMPTY, 95 96 /** Callback type for when a DAC channel data underrun condition occurs 97 * (requires event triggered mode) */ 98 DAC_CALLBACK_DATA_UNDERRUN, 99 100 /** Callback type for when a DAC channel write buffer job complete (requires 101 * event triggered mode) */ 102 DAC_CALLBACK_TRANSFER_COMPLETE, 103 #if !defined(__DOXYGEN__) 104 DAC_CALLBACK_N, 105 #endif 106 }; 107 108 #endif 109 110 #include <dac_feature.h> 111 112 /** 113 * \name Configuration and Initialization 114 * @{ 115 */ 116 117 bool dac_is_syncing( 118 struct dac_module *const dev_inst); 119 120 void dac_get_config_defaults( 121 struct dac_config *const config); 122 123 enum status_code dac_init( 124 struct dac_module *const dev_inst, 125 Dac *const module, 126 struct dac_config *const config); 127 128 void dac_reset( 129 struct dac_module *const dev_inst); 130 131 void dac_enable( 132 struct dac_module *const dev_inst); 133 134 void dac_disable( 135 struct dac_module *const dev_inst); 136 137 void dac_enable_events( 138 struct dac_module *const module_inst, 139 struct dac_events *const events); 140 141 void dac_disable_events( 142 struct dac_module *const module_inst, 143 struct dac_events *const events); 144 145 /** @} */ 146 147 /** 148 * \name Configuration and Initialization (Channel) 149 * @{ 150 */ 151 152 void dac_chan_get_config_defaults( 153 struct dac_chan_config *const config); 154 155 void dac_chan_set_config( 156 struct dac_module *const dev_inst, 157 const enum dac_channel channel, 158 struct dac_chan_config *const config); 159 160 void dac_chan_enable( 161 struct dac_module *const dev_inst, 162 enum dac_channel channel); 163 164 void dac_chan_disable( 165 struct dac_module *const dev_inst, 166 enum dac_channel channel); 167 168 /** @} */ 169 170 /** 171 * \name Channel Data Management 172 * @{ 173 */ 174 175 enum status_code dac_chan_write( 176 struct dac_module *const dev_inst, 177 enum dac_channel channel, 178 const uint16_t data); 179 180 enum status_code dac_chan_write_buffer_wait( 181 struct dac_module *const module_inst, 182 enum dac_channel channel, 183 uint16_t *buffer, 184 uint32_t length); 185 186 /** @} */ 187 188 /** 189 * \name Status Management 190 * @{ 191 */ 192 uint32_t dac_get_status( 193 struct dac_module *const module_inst); 194 void dac_clear_status( 195 struct dac_module *const module_inst, 196 uint32_t status_flags); 197 198 /** @} */ 199 200 #ifdef __cplusplus 201 } 202 #endif 203 204 /** @} */ 205 206 207 #endif /* DAC_H_INCLUDED */ 208