View detail for Atmel AT11379: SAM L21 Digital-to-Analog Converter (DAC) Driver

SMART ARM-based Microcontroller
AT11379: SAM Digital-to-Analog (DAC) Driver
APPLICATION NOTE
Introduction
®
®
This driver for Atmel | SMART ARM -based microcontrollers provides an
interface for the conversion of digital values to analog voltage. The following
driver API modes are covered by this manual:
•
•
Polled APIs
Callback APIs
The following peripheral is used by this module:
•
DAC (Digital-to-Analog Converter)
The following devices can use this module:
•
Atmel | SMART SAM L21
The outline of this documentation is as follows:
•
Prerequisites
•
Module Overview
•
Special Considerations
•
Extra Information
•
Examples
•
API Overview
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
Table of Contents
Introduction......................................................................................................................1
1. Software License....................................................................................................... 4
2. Prerequisites..............................................................................................................5
3. Module Overview....................................................................................................... 6
3.1.
3.2.
3.3.
3.4.
3.5.
3.6.
Conversion Range........................................................................................................................6
Conversion................................................................................................................................... 7
Analog Output...............................................................................................................................7
Events...........................................................................................................................................7
Left and Right Adjusted Values.................................................................................................... 7
Clock Sources.............................................................................................................................. 8
4. Special Considerations.............................................................................................. 9
4.1.
4.2.
Sleep Mode.................................................................................................................................. 9
Conversion Time.......................................................................................................................... 9
5. Extra Information..................................................................................................... 10
6. Examples................................................................................................................. 11
7. API Overview........................................................................................................... 12
7.1.
7.2.
7.3.
7.4.
7.5.
Variable and Type Definitions..................................................................................................... 12
7.1.1.
Type dac_callback_t.................................................................................................... 12
Structure Definitions................................................................................................................... 12
7.2.1.
Struct dac_chan_config............................................................................................... 12
7.2.2.
Struct dac_config......................................................................................................... 12
7.2.3.
Struct dac_events........................................................................................................ 12
7.2.4.
Struct dac_module.......................................................................................................13
Macro Definitions........................................................................................................................13
7.3.1.
DAC Status Flags........................................................................................................ 13
7.3.2.
Macro DAC_TIMEOUT................................................................................................ 14
Function Definitions....................................................................................................................14
7.4.1.
Configuration and Initialization.....................................................................................14
7.4.2.
Configuration and Initialization (Channel)....................................................................17
7.4.3.
Channel Data Management.........................................................................................18
7.4.4.
Status Management.....................................................................................................19
7.4.5.
Callback Configuration and Initialization......................................................................20
7.4.6.
Callback Enabling and Disabling (Channel)................................................................ 23
7.4.7.
Status Management (Channel)....................................................................................25
Enumeration Definitions............................................................................................................. 25
7.5.1.
Enum dac_callback......................................................................................................25
7.5.2.
Enum dac_channel...................................................................................................... 26
7.5.3.
Enum dac_current_ctrl.................................................................................................26
7.5.4.
Enum dac_reference................................................................................................... 26
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
2
8. Extra Information for DAC Driver............................................................................. 27
8.1.
8.2.
8.3.
8.4.
Acronyms....................................................................................................................................27
Dependencies.............................................................................................................................27
Errata..........................................................................................................................................27
Module History............................................................................................................................27
9. Examples for DAC Driver.........................................................................................28
9.1.
9.2.
Quick Start Guide for DAC - Basic............................................................................................. 28
9.1.1.
Quick Start................................................................................................................... 28
9.1.2.
Use Case..................................................................................................................... 29
Quick Start Guide for DAC - Callback........................................................................................ 30
9.2.1.
Setup........................................................................................................................... 30
9.2.2.
Use Case..................................................................................................................... 35
10. Document Revision History..................................................................................... 36
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
3
1.
Software License
Redistribution and use in source and binary forms, with or without modification, are permitted provided
that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials provided with the distribution.
3. The name of Atmel may not be used to endorse or promote products derived from this software without
specific prior written permission.
4. This software may only be redistributed and used in connection with an Atmel microcontroller product.
THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE EXPRESSLY AND SPECIFICALLY
DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
4
2.
Prerequisites
There are no prerequisites for this module.
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
5
3.
Module Overview
The Digital-to-Analog converter converts a digital value to an analog voltage. The DAC Controller can
operate as two independent DACs or as a single DAC in differential mode. Each DAC has a 12-bit
resolution and it is capable of converting up to 1M samples per second (Msps).
A common use of DAC is to generate audio signals by connecting the DAC output to a speaker, or to
generate a reference voltage; either for an external circuit or an internal peripheral such as the Analog
Comparator.
After being set up, the DAC will convert new digital values written to the conversion data register (DATA0
or DATA1) to an analog value either on the DAC output (VOUT0 or VOUT1) pin of the device, or internally
for use as an input to the AC, ADC, and other analog modules.
Writing the DATA register will start a new conversion. It is also possible to trigger the conversion from the
event system.
A simplified block diagram of the DAC can be seen in Figure 3-1 DAC Block Diagram on page 6.
Figure 3-1 DAC Block Diagram
3.1.
Conversion Range
The conversion range is between GND and the selected voltage reference. Available voltage references
are:
•
Voltage supply (VDDANA)
•
Internal bandgap reference (INTREF)
•
Unbuffered External voltage reference (VREFPU)
•
Buffered External voltage reference (VREFPB)
Note: Internal references will be enabled by the driver, but not disabled. Any reference not used by the
application should be disabled by the application.
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
6
The output voltage from a DAC channel is given as:
�����
����� =
× ����
0�3F�
The differential output voltage is given as:
����0
���� =
× ���� = ����0 − ����1
0�1F�
3.2.
Conversion
The conversion digital value written to the DATA register will be converted to an analog value. Writing the
DATA register will start a new conversion. It is also possible to write the conversion value to the
DATABUF register, the writing of the DATA register can then be triggered from the event system, which
will load the value from DATABUF to DATA.
3.3.
Analog Output
The analog output value can be output to the VOUTx converted by DACx, and each data conversion can
be started independently.
In differential mode, DAC0 and DAC1 are operating synchronously to convert value. VOUT0 is the
positive output and VOUT1 the negative output.
VOUT0 signal is internally connected so that it can be used as input for AC, ADC, or OPAMP modules
when DAC0 is enabled.
Note: The pin VOUT0 will be dedicated to internal input and cannot be configured as alternate function.
3.4.
Events
Events generation and event actions are configurable in the DAC. The DAC has one event line input and
one event output: Start Conversion and Data Buffer Empty.
If the Start Conversion input event is enabled in the module configuration, an incoming event will load
data from the data buffer to the data register and start a new conversion. This method synchronizes
conversions with external events (such as those from a timer module) and ensures regular and fixed
conversion intervals.
If the Data Buffer Empty output event is enabled in the module configuration, events will be generated
when the DAC data buffer register becomes empty and new data can be loaded to the buffer.
Note: The connection of events between modules requires the use of the SAM Event System Driver
(EVENTS) to route output event of one module to the the input event of another. For more information on
event routing, refer to the event driver documentation.
3.5.
Left and Right Adjusted Values
The 12-bit input value to the DAC is contained in a 16-bit register. This can be configured to be either left
or right adjusted. In Figure 3-2 Left and Right Adjusted Values on page 8 both options are shown, and
the position of the most (MSB) and the least (LSB) significant bits are indicated. The unused bits should
always be written to zero.
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
7
Figure 3-2 Left and Right Adjusted Values
Left adjusted.
MSB
Right adjusted.
LSB
MSB
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATA[11:0]
3.6.
LSB
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATA[11:0]
Clock Sources
The clock for the DAC interface (CLK_DAC) is generated by the Power Manager. This clock is turned on
by default, and can be enabled and disabled in the Power Manager.
Additionally, an asynchronous clock source (GCLK_DAC) is required. These clocks are normally disabled
by default. The selected clock source must be enabled in the Power Manager before it can be used by
the DAC. The DAC core operates asynchronously from the user interface and peripheral bus. As a
consequence, the DAC needs two clock cycles of both CLK_DAC and GCLK_DAC to synchronize the
values written to some of the control and data registers. The oscillator source for the GCLK_DAC clock is
selected in the Supply Control Interface (SUPC).
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
8
4.
Special Considerations
4.1.
Sleep Mode
The DAC can do conversions in Active or Idle modes, and will continue the conversions in standby sleep
mode if the RUNSTDBY bit in the DACCTRLx register is set. Otherwise, the DACx will stop conversions.
If DACx conversion is stopped in standby sleep mode, DACx is disabled to reduce power consumption.
When exiting standby sleep mode, DACx is enabled therefore startup time is required before starting a
new conversion.
4.2.
Conversion Time
DAC conversion time is approximately 2.85µs. The user must ensure that new data is not written to the
DAC before the last conversion is complete. Conversions should be triggered by a periodic event from a
Timer/Counter or another peripheral.
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
9
5.
Extra Information
For extra information, see Extra Information for DAC Driver. This includes:
•
Acronyms
•
Dependencies
•
Errata
•
Module History
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
10
6.
Examples
For a list of examples related to this driver, see Examples for DAC Driver.
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
11
7.
API Overview
7.1.
Variable and Type Definitions
7.1.1.
Type dac_callback_t
typedef void(* dac_callback_t )(uint8_t channel)
Type definition for a DAC module callback function.
7.2.
Structure Definitions
7.2.1.
Struct dac_chan_config
Configuration for a DAC channel. This structure should be initialized by the
dac_chan_get_config_defaults() function before being modified by the user application.
Table 7-1 Members
Type
7.2.2.
Name
Description
enum dac_current_ctrl current
Current control data
bool
dither_mode
Dither mode enable data
bool
left_adjust
Left adjusted data
uint8_t
refresh_period
The DAC conversion refreshed periodically when used to
generate a static voltage
bool
run_in_standby The DAC behaves as in normal mode when the chip enters
STANDBY sleep mode
Struct dac_config
Configuration structure for a DAC instance. This structure should be initialized by the
dac_get_config_defaults() function before being modified by the user application.
Table 7-2 Members
7.2.3.
Type
Name
Description
enum gclk_generator
clock_source
GCLK generator used to clock the peripheral
bool
differential_mode
Differential mode enable data
enum dac_reference
reference
Reference voltage
Struct dac_events
Event flags for the DAC module. This is used to enable and disable events via dac_enable_events() and
dac_disable_events().
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
12
Table 7-3 Members
7.2.4.
Type Name
Description
bool
generate_event_on_chan0_buffer_empty
Enable event generation on DAC0 data buffer empty
bool
generate_event_on_chan0_falling_edge
Enable the falling edge of the input event for DAC0
bool
generate_event_on_chan1_buffer_empty
Enable event generation on DAC1 data buffer empty
bool
generate_event_on_chan1_falling_edge
Enable the falling edge of the input event for DAC1
bool
on_event_chan0_start_conversion
Start a new DAC0 conversion
bool
on_event_chan1_start_conversion
Start a new DAC1 conversion
Struct dac_module
DAC software instance structure, used to retain software state information of an associated hardware
module instance.
Note: The fields of this structure should not be altered by the user application; they are reserved for
module-internal use only.
7.3.
Macro Definitions
7.3.1.
DAC Status Flags
DAC status flags, returned by dac_get_status() and cleared by dac_clear_status().
7.3.1.1.
Macro DAC_STATUS_CHANNEL_0_EMPTY
#define DAC_STATUS_CHANNEL_0_EMPTY
Data Buffer Empty Channel 0 - Set when data is transferred from DATABUF to DATA by a start
conversion event and DATABUF is ready for new data.
7.3.1.2.
Macro DAC_STATUS_CHANNEL_1_EMPTY
#define DAC_STATUS_CHANNEL_1_EMPTY
Data Buffer Empty Channel 1 - Set when data is transferred from DATABUF to DATA by a start
conversion event and DATABUF is ready for new data.
7.3.1.3.
Macro DAC_STATUS_CHANNEL_0_UNDERRUN
#define DAC_STATUS_CHANNEL_0_UNDERRUN
Underrun Channel 0 - Set when a start conversion event occurs when DATABUF is empty.
7.3.1.4.
Macro DAC_STATUS_CHANNEL_1_UNDERRUN
#define DAC_STATUS_CHANNEL_1_UNDERRUN
Underrun Channel 1 - Set when a start conversion event occurs when DATABUF is empty.
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
13
7.3.2.
Macro DAC_TIMEOUT
#define DAC_TIMEOUT
Define DAC features set according to different device families.
7.4.
Function Definitions
7.4.1.
Configuration and Initialization
7.4.1.1.
Function dac_is_syncing()
Determines if the hardware module(s) are currently synchronizing to the bus.
bool dac_is_syncing(
struct dac_module *const dev_inst)
Checks to see if the underlying hardware peripheral module(s) are currently synchronizing across multiple
clock domains to the hardware bus. This function can be used to delay further operations on a module
until such time that it is ready, to prevent blocking delays for synchronization in the user application.
Table 7-4 Parameters
Data direction
Parameter name
Description
[in]
dev_inst
Pointer to the DAC software instance struct
Returns
Synchronization status of the underlying hardware module(s).
Table 7-5 Return Values
7.4.1.2.
Return value
Description
true
If the module synchronization is ongoing
false
If the module has completed synchronization
Function dac_get_config_defaults()
Initializes a DAC configuration structure to defaults.
void dac_get_config_defaults(
struct dac_config *const config)
Initializes a given DAC configuration structure to a set of known default values. This function should be
called on any new instance of the configuration structures before being modified by the user application.
The default configuration is as follows:
•
1V from internal bandgap reference
•
Drive the DAC output to the VOUT pin
•
Right adjust data
•
GCLK generator 0 (GCLK main) clock source
•
The output buffer is disabled when the chip enters STANDBY sleep mode
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
14
Table 7-6 Parameters
7.4.1.3.
Data direction
Parameter name
Description
[out]
config
Configuration structure to initialize to default values
Function dac_init()
Initialize the DAC device struct.
enum status_code dac_init(
struct dac_module *const dev_inst,
Dac *const module,
struct dac_config *const config)
Use this function to initialize the Digital to Analog Converter. Resets the underlying hardware module and
configures it.
Note: The DAC channel must be configured separately.
Table 7-7 Parameters
Data direction
Parameter name
Description
[out]
module_inst
Pointer to the DAC software instance struct
[in]
module
Pointer to the DAC module instance
[in]
config
Pointer to the config struct, created by the user application
Returns
Status of initialization.
Table 7-8 Return Values
7.4.1.4.
Return value
Description
STATUS_OK
Module initiated correctly
STATUS_ERR_DENIED
If module is enabled
STATUS_BUSY
If module is busy resetting
Function dac_reset()
Resets the DAC module.
void dac_reset(
struct dac_module *const dev_inst)
This function will reset the DAC module to its power on default values and disable it.
Table 7-9 Parameters
Data direction
Parameter name
Description
[in]
module_inst
Pointer to the DAC software instance struct
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
15
7.4.1.5.
Function dac_enable()
Enable the DAC module.
void dac_enable(
struct dac_module *const dev_inst)
Enables the DAC interface and the selected output. If any internal reference is selected it will be enabled.
Table 7-10 Parameters
7.4.1.6.
Data direction
Parameter name
Description
[in]
module_inst
Pointer to the DAC software instance struct
Function dac_disable()
Disable the DAC module.
void dac_disable(
struct dac_module *const dev_inst)
Disables the DAC interface and the output buffer.
Table 7-11 Parameters
7.4.1.7.
Data direction
Parameter name
Description
[in]
module_inst
Pointer to the DAC software instance struct
Function dac_enable_events()
Enables a DAC event input or output.
void dac_enable_events(
struct dac_module *const module_inst,
struct dac_events *const events)
Enables one or more input or output events to or from the DAC module. See Struct dac_events for a list
of events this module supports.
Note: Events cannot be altered while the module is enabled.
Table 7-12 Parameters
7.4.1.8.
Data direction
Parameter name
Description
[in]
module_inst
Software instance for the DAC peripheral
[in]
events
Struct containing flags of events to enable
Function dac_disable_events()
Disables a DAC event input or output.
void dac_disable_events(
struct dac_module *const module_inst,
struct dac_events *const events)
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
16
Disables one or more input or output events to or from the DAC module. See Struct dac_events for a list
of events this module supports.
Note: Events cannot be altered while the module is enabled.
Table 7-13 Parameters
Data direction
Parameter name
Description
[in]
module_inst
Software instance for the DAC peripheral
[in]
events
Struct containing flags of events to disable
7.4.2.
Configuration and Initialization (Channel)
7.4.2.1.
Function dac_chan_get_config_defaults()
void dac_chan_get_config_defaults(
struct dac_chan_config *const config)
7.4.2.2.
Function dac_chan_set_config()
Writes a DAC channel configuration to the hardware module.
void dac_chan_set_config(
struct dac_module *const dev_inst,
const enum dac_channel channel,
struct dac_chan_config *const config)
Writes out a given channel configuration to the hardware module.
Note: The DAC device instance structure must be initialized before calling this function.
Table 7-14 Parameters
7.4.2.3.
Data direction
Parameter name
Description
[in]
module_inst
Pointer to the DAC software instance struct
[in]
channel
Channel to configure
[in]
config
Pointer to the configuration struct
Function dac_chan_enable()
Enable a DAC channel.
void dac_chan_enable(
struct dac_module *const dev_inst,
enum dac_channel channel)
Enables the selected DAC channel.
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
17
Table 7-15 Parameters
7.4.2.4.
Data direction
Parameter name
Description
[in]
module_inst
Pointer to the DAC software instance struct
[in]
channel
Channel to enable
Function dac_chan_disable()
Disable a DAC channel.
void dac_chan_disable(
struct dac_module *const dev_inst,
enum dac_channel channel)
Disables the selected DAC channel.
Table 7-16 Parameters
Data direction
Parameter name
Description
[in]
module_inst
Pointer to the DAC software instance struct
[in]
channel
Channel to disable
7.4.3.
Channel Data Management
7.4.3.1.
Function dac_chan_write()
Write to the DAC.
enum status_code dac_chan_write(
struct dac_module *const dev_inst,
enum dac_channel channel,
const uint16_t data)
Note: To be event triggered, the enable_start_on_event must be enabled in the configuration.
Table 7-17 Parameters
Data direction
Parameter name
Description
[in]
module_inst
Pointer to the DAC software device struct
[in]
channel
DAC channel to write to
[in]
data
Conversion data
Returns
Status of the operation.
Table 7-18 Return Values
Return value
Description
STATUS_OK
If the data was written
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
18
7.4.3.2.
Function dac_chan_write_buffer_wait()
Write to the DAC.
enum status_code dac_chan_write_buffer_wait(
struct dac_module *const module_inst,
enum dac_channel channel,
uint16_t * buffer,
uint32_t length)
Note: To be event triggered, the enable_start_on_event must be enabled in the configuration.
Table 7-19 Parameters
Data direction
Parameter name
Description
[in]
module_inst
Pointer to the DAC software device struct
[in]
channel
DAC channel to write to
[in]
buffer
Pointer to the digital data write buffer to be converted
[in]
length
Length of the write buffer
Returns
Status of the operation.
Table 7-20 Return Values
Return value
Description
STATUS_OK
If the data was written or no data conversion required
STATUS_ERR_UNSUPPORTED_DEV
The DAC is not configured as using event trigger
STATUS_BUSY
The DAC is busy and can not do the conversion
7.4.4.
Status Management
7.4.4.1.
Function dac_get_status()
Retrieves the current module status.
uint32_t dac_get_status(
struct dac_module *const module_inst)
Checks the status of the module and returns it as a bitmask of status flags.
Table 7-21 Parameters
Data direction
Parameter name
Description
[in]
module_inst
Pointer to the DAC software device struct
Returns
Bitmask of status flags.
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
19
Table 7-22 Return Values
Return value
Description
DAC_STATUS_CHANNEL_0_EMPTY
Data has been transferred from DATABUF to DATA by a
start conversion event and DATABUF is ready for new data
DAC_STATUS_CHANNEL_0_UNDERRUN A start conversion event has occurred when DATABUF is
empty
7.4.4.2.
Function dac_clear_status()
Clears a module status flag.
void dac_clear_status(
struct dac_module *const module_inst,
uint32_t status_flags)
Clears the given status flag of the module.
Table 7-23 Parameters
Data direction
Parameter name
Description
[in]
module_inst
Pointer to the DAC software device struct
[in]
status_flags
Bit mask of status flags to clear
7.4.5.
Callback Configuration and Initialization
7.4.5.1.
Function dac_chan_write_buffer_job()
Convert a specific number digital data to analog through DAC.
enum status_code dac_chan_write_buffer_job(
struct dac_module *const module_inst,
const enum dac_channel channel,
uint16_t * buffer,
uint32_t buffer_size)
Note: To be event triggered, the enable_start_on_event must be enabled in the configuration.
Table 7-24 Parameters
Data direction
Parameter name
Description
[in]
module_inst
Pointer to the DAC software device struct
[in]
channel
DAC channel to write to
[in]
buffer
Pointer to the digital data write buffer to be converted
[in]
length
Size of the write buffer
Returns
Status of the operation.
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
20
Table 7-25 Return Values
Return value
Description
STATUS_OK
If the data was written
STATUS_ERR_UNSUPPORTED_DEV If a callback that requires event driven mode was specified with
a DAC instance configured in non-event mode
STATUS_BUSY
7.4.5.2.
The DAC is busy and can not accept a new job
Function dac_chan_write_job()
Convert one digital data job.
enum status_code dac_chan_write_job(
struct dac_module *const module_inst,
const enum dac_channel channel,
uint16_t data)
Note: To be event triggered, the enable_start_on_event must be enabled in the configuration.
Table 7-26 Parameters
Data direction
Parameter name
Description
[in]
module_inst
Pointer to the DAC software device struct
[in]
channel
DAC channel to write to
[in]
data
Digital data to be converted
Returns
Status of the operation.
Table 7-27 Return Values
Return value
Description
STATUS_OK
If the data was written
STATUS_ERR_UNSUPPORTED_DEV If a callback that requires event driven mode was specified with
a DAC instance configured in non-event mode
STATUS_BUSY
7.4.5.3.
The DAC is busy and can not accept a new job
Function dac_register_callback()
Registers an asynchronous callback function with the driver.
enum status_code dac_register_callback(
struct dac_module *const module,
const enum dac_channel channel,
const dac_callback_t callback,
const enum dac_callback type)
Registers an asynchronous callback with the DAC driver, fired when a callback condition occurs.
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
21
Table 7-28 Parameters
Data direction
Parameter name
Description
[in, out]
module_inst
Pointer to the DAC software instance struct
[in]
callback
Pointer to the callback function to register
[in]
channel
Logical channel to register callback function
[in]
type
Type of callback function to register
Returns
Status of the registration operation.
Table 7-29 Return Values
Return value
Description
STATUS_OK
The callback was registered successfully
STATUS_ERR_INVALID_ARG
If an invalid callback type was supplied
STATUS_ERR_UNSUPPORTED_DEV If a callback that requires event driven mode was specified with
a DAC instance configured in non-event mode
7.4.5.4.
Function dac_unregister_callback()
Unregisters an asynchronous callback function with the driver.
enum status_code dac_unregister_callback(
struct dac_module *const module,
const enum dac_channel channel,
const enum dac_callback type)
Unregisters an asynchronous callback with the DAC driver, removing it from the internal callback
registration table.
Table 7-30 Parameters
Data direction
Parameter name
Description
[in, out]
module_inst
Pointer to the DAC software instance struct
[in]
channel
Logical channel to unregister callback function
[in]
type
Type of callback function to unregister
Returns
Status of the de-registration operation.
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
22
Table 7-31 Return Values
Return value
Description
STATUS_OK
The callback was unregistered successfully
STATUS_ERR_INVALID_ARG
If an invalid callback type was supplied
STATUS_ERR_UNSUPPORTED_DEV If a callback that requires event driven mode was specified with
a DAC instance configured in non-event mode
7.4.6.
Callback Enabling and Disabling (Channel)
7.4.6.1.
Function dac_chan_enable_callback()
Enables asynchronous callback generation for a given channel and type.
enum status_code dac_chan_enable_callback(
struct dac_module *const module,
const enum dac_channel channel,
const enum dac_callback type)
Enables asynchronous callbacks for a given logical DAC channel and type. This must be called before a
DAC channel will generate callback events.
Table 7-32 Parameters
Data direction
Parameter name
Description
[in, out]
dac_module
Pointer to the DAC software instance struct
[in]
channel
Logical channel to enable callback function
[in]
type
Type of callback function callbacks to enable
Returns
Status of the callback enable operation.
Table 7-33 Return Values
Return value
Description
STATUS_OK
The callback was enabled successfully
STATUS_ERR_UNSUPPORTED_DEV If a callback that requires event driven mode was specified with
a DAC instance configured in non-event mode
7.4.6.2.
Function dac_chan_disable_callback()
Disables asynchronous callback generation for a given channel and type.
enum status_code dac_chan_disable_callback(
struct dac_module *const module,
const enum dac_channel channel,
const enum dac_callback type)
Disables asynchronous callbacks for a given logical DAC channel and type.
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
23
Table 7-34 Parameters
Data direction
Parameter name
Description
[in, out]
dac_module
Pointer to the DAC software instance struct
[in]
channel
Logical channel to disable callback function
[in]
type
Type of callback function callbacks to disable
Returns
Status of the callback disable operation.
Table 7-35 Return Values
Return value
Description
STATUS_OK
The callback was disabled successfully
STATUS_ERR_UNSUPPORTED_DEV If a callback that requires event driven mode was specified with
a DAC instance configured in non-event mode
7.4.6.3.
Function dac_chan_get_job_status()
Gets the status of a job.
enum status_code dac_chan_get_job_status(
struct dac_module * module_inst,
const enum dac_channel channel)
Gets the status of an ongoing or the last job.
Table 7-36 Parameters
Data direction
Parameter name
Description
[in]
module_inst
Pointer to the DAC software instance struct
[in]
channel
Logical channel to enable callback function
Returns
Status of the job.
7.4.6.4.
Function dac_chan_abort_job()
Aborts an ongoing job.
void dac_chan_abort_job(
struct dac_module * module_inst,
const enum dac_channel channel)
Aborts an ongoing job.
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
24
Table 7-37 Parameters
Data direction
Parameter name
Description
[in]
module_inst
Pointer to the DAC software instance struct
[in]
channel
Logical channel to enable callback function
7.4.7.
Status Management (Channel)
7.4.7.1.
Function dac_chan_is_end_of_conversion()
Retrieves the status of DAC channel end of conversion.
bool dac_chan_is_end_of_conversion(
struct dac_module *const module_inst,
enum dac_channel channel)
Checks if the conversion is completed or not and returns boolean flag of status.
Table 7-38 Parameters
Data direction
Parameter name
Description
[in]
module_inst
Pointer to the DAC software instance struct
[in]
channel
Channel to disable
Table 7-39 Return Values
Return value
Description
true
Conversion is complete, VOUT is stable
false
No conversion completed since last load of DATA
7.5.
Enumeration Definitions
7.5.1.
Enum dac_callback
Enum for the possible callback types for the DAC module.
Table 7-40 Members
Enum value
Description
DAC_CALLBACK_DATA_EMPTY
Callback type for when a DAC channel data empty
condition occurs (requires event triggered mode)
DAC_CALLBACK_DATA_UNDERRUN
Callback type for when a DAC channel data underrun
condition occurs (requires event triggered mode)
DAC_CALLBACK_TRANSFER_COMPLETE Callback type for when a DAC channel write buffer job
complete (requires event triggered mode)
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
25
7.5.2.
Enum dac_channel
Enum for the DAC channel selection.
Table 7-41 Members
7.5.3.
Enum value
Description
DAC_CHANNEL_0
DAC output channel 0
DAC_CHANNEL_1
DAC output channel 1
Enum dac_current_ctrl
Enum for the current in output buffer according the conversion rate.
Table 7-42 Members
7.5.4.
Enum value
Description
DAC_CURRENT_12M
1MHz < GCLK_DAC < 12MHz
DAC_CURRENT_1M
100KHz < GCLK_DAC < 1MHz
DAC_CURRENT_100K
10KHz < GCLK_DAC < 100KHz
DAC_CURRENT_10K
GCLK_DAC < 10KHz
Enum dac_reference
Enum for the possible reference voltages for the DAC.
Table 7-43 Members
Enum value
Description
DAC_REFERENCE_VREFPU
Unbuffered external voltage reference
DAC_REFERENCE_VDDANA
Analog VCC as reference
DAC_REFERENCE_VREFPB
Buffered external voltage reference
DAC_REFERENCE_INTREF
Internal bandgap reference
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
26
8.
Extra Information for DAC Driver
8.1.
Acronyms
The table below presents the acronyms used in this module:
8.2.
Acronym
Description
ADC
Analog-to-Digital Converter
AC
Analog Comparator
DAC
Digital-to-Analog Converter
LSB
Least Significant Bit
MSB
Most Significant Bit
DMA
Direct Memory Access
Dependencies
This driver has the following dependency:
•
8.3.
System Pin Multiplexer Driver
Errata
There are no errata related to this driver.
8.4.
Module History
An overview of the module history is presented in the table below, with details on the enhancements and
fixes made to the module since its first release. The current version of this corresponds to the newest
version in the table.
Changelog
Initial Release
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
27
9.
Examples for DAC Driver
This is a list of the available Quick Start guides (QSGs) and example applications for SAM Digital-toAnalog (DAC) Driver. QSGs are simple examples with step-by-step instructions to configure and use this
driver in a selection of use cases. Note that a QSG can be compiled as a standalone application or be
added to the user application.
•
•
9.1.
Quick Start Guide for DAC - Basic
Quick Start Guide for DAC - Callback
Quick Start Guide for DAC - Basic
In this use case, the DAC will be configured with the following settings:
•
Analog VCC as reference
•
Internal output disabled
•
Drive the DAC output to the VOUT pin
•
Right adjust data
•
The output buffer is disabled when the chip enters STANDBY sleep mode
9.1.1.
Quick Start
9.1.1.1.
Prerequisites
There are no special setup requirements for this use-case.
9.1.1.2.
Code
Add to the main application source file, outside of any functions:
struct dac_module dac_instance;
Copy-paste the following setup code to your user application:
void configure_dac(void)
{
struct dac_config config_dac;
dac_get_config_defaults(&config_dac);
}
dac_init(&dac_instance, DAC, &config_dac);
void configure_dac_channel(void)
{
struct dac_chan_config config_dac_chan;
dac_chan_get_config_defaults(&config_dac_chan);
dac_chan_set_config(&dac_instance, DAC_CHANNEL_0, &config_dac_chan);
}
dac_chan_enable(&dac_instance, DAC_CHANNEL_0);
Add to user application initialization (typically the start of main()):
configure_dac();
configure_dac_channel();
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
28
9.1.1.3.
Workflow
1.
Create a module software instance structure for the DAC module to store the DAC driver state
while in use.
struct dac_module dac_instance;
2.
Note: This should never go out of scope as long as the module is in use. In most cases, this
should be global.
Configure the DAC module.
1. Create a DAC module configuration struct, which can be filled out to adjust the configuration
of a physical DAC peripheral.
struct dac_config config_dac;
2.
Initialize the DAC configuration struct with the module's default values.
dac_get_config_defaults(&config_dac);
3.
Note: This should always be performed before using the configuration struct to ensure that
all values are initialized to known default settings.
Configure the DAC channel.
1.
Create a DAC channel configuration struct, which can be filled out to adjust the configuration
of a physical DAC output channel.
struct dac_chan_config config_dac_chan;
2.
Initialize the DAC channel configuration struct with the module's default values.
dac_chan_get_config_defaults(&config_dac_chan);
3.
Note: This should always be performed before using the configuration struct to ensure that
all values are initialized to known default settings.
Configure the DAC channel with the desired channel settings.
dac_chan_set_config(&dac_instance, DAC_CHANNEL_0,
&config_dac_chan);
4.
Enable the DAC channel so that it can output a voltage.
dac_chan_enable(&dac_instance, DAC_CHANNEL_0);
4.
Enable the DAC module.
dac_enable(&dac_instance);
9.1.2.
Use Case
9.1.2.1.
Code
Copy-paste the following code to your user application:
uint16_t i = 0;
while (1) {
dac_chan_write(&dac_instance, DAC_CHANNEL_0, i);
}
if (++i == 0x3FF) {
i = 0;
}
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
29
9.1.2.2.
Workflow
1.
Create a temporary variable to track the current DAC output value.
uint16_t i = 0;
2.
Enter an infinite loop to continuously output new conversion values to the DAC.
while (1) {
3.
Write the next conversion value to the DAC, so that it will be output on the device's DAC analog
output pin.
dac_chan_write(&dac_instance, DAC_CHANNEL_0, i);
4.
Increment and wrap the DAC output conversion value, so that a ramp pattern will be generated.
if (++i == 0x3FF) {
i = 0;
}
9.2.
Quick Start Guide for DAC - Callback
In this use case, the DAC will convert 16 samples using interrupt driven conversion. When all samples
have been sampled, a callback will be called that signals the main application that conversion is compete.
The DAC will be set up as follows:
•
Analog VCC as reference
•
Internal output disabled
•
Drive the DAC output to the VOUT pin
•
Right adjust data
•
The output buffer is disabled when the chip enters STANDBY sleep mode
•
DAC conversion is started with RTC overflow event
9.2.1.
Setup
9.2.1.1.
Prerequisites
There are no special setup requirements for this use case.
9.2.1.2.
Code
Add to the main application source file, outside of any functions:
#define DATA_LENGTH (16)
struct dac_module dac_instance;
struct rtc_module rtc_instance;
struct events_resource event_dac;
static volatile bool transfer_is_done = false;
static uint16_t dac_data[DATA_LENGTH];
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
30
Callback function:
void dac_callback(uint8_t channel)
{
UNUSED(channel);
}
transfer_is_done = true;
Copy-paste the following setup code to your user application:
void configure_rtc_count(void)
{
struct rtc_count_events rtc_event;
struct rtc_count_config config_rtc_count;
rtc_count_get_config_defaults(&config_rtc_count);
config_rtc_count.prescaler
= RTC_COUNT_PRESCALER_DIV_1;
config_rtc_count.mode
= RTC_COUNT_MODE_16BIT;
#ifdef FEATURE_RTC_CONTINUOUSLY_UPDATED
config_rtc_count.continuously_update = true;
#endif
rtc_count_init(&rtc_instance, RTC, &config_rtc_count);
rtc_event.generate_event_on_overflow = true;
rtc_count_enable_events(&rtc_instance, &rtc_event);
}
rtc_count_enable(&rtc_instance);
void configure_dac(void)
{
struct dac_config config_dac;
dac_get_config_defaults(&config_dac);
#if (SAML21)
dac_instance.start_on_event[DAC_CHANNEL_0] = true;
#else
dac_instance.start_on_event = true;
#endif
dac_init(&dac_instance, DAC, &config_dac);
struct dac_events events =
#if (SAML21)
{ .on_event_chan0_start_conversion = true };
#else
{ .on_event_start_conversion = true };
#endif
}
dac_enable_events(&dac_instance, &events);
void configure_dac_channel(void)
{
struct dac_chan_config config_dac_chan;
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
31
dac_chan_get_config_defaults(&config_dac_chan);
dac_chan_set_config(&dac_instance, DAC_CHANNEL_0,
&config_dac_chan);
}
dac_chan_enable(&dac_instance, DAC_CHANNEL_0);
Define a data length variables and add to user application (typically the start of main()):
uint32_t i;
Add to user application initialization (typically the start of main()):
configure_rtc_count();
rtc_count_set_period(&rtc_instance, 1);
configure_dac();
configure_dac_channel();
dac_enable(&dac_instance);
configure_event_resource();
dac_register_callback(&dac_instance, DAC_CHANNEL_0,
dac_callback,DAC_CALLBACK_TRANSFER_COMPLETE);
dac_chan_enable_callback(&dac_instance, DAC_CHANNEL_0,
DAC_CALLBACK_TRANSFER_COMPLETE);
for (i = 0;i < DATA_LENGTH;i++) {
dac_data[i] = 0xfff * i;
}
9.2.1.3.
Workflow
1.
Create a module software instance structure for the DAC module to store the DAC driver state
while in use.
struct dac_module dac_instance;
2.
Note: This should never go out of scope as long as the module is in use. In most cases, this
should be global.
RTC module is used as the event trigger for DAC in this case, create a module software instance
structure for the RTC module to store the RTC driver state.
struct rtc_module rtc_instance;
3.
Note: This should never go out of scope as long as the module is in use. In most cases, this
should be global.
Create a buffer for the DAC samples to be converted by the driver.
static uint16_t dac_data[DATA_LENGTH];
4.
Create a callback function that will be called when DAC completes convert job.
void dac_callback(uint8_t channel)
{
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
32
UNUSED(channel);
}
5.
transfer_is_done = true;
Configure the DAC module.
1. Create a DAC module configuration struct, which can be filled out to adjust the configuration
of a physical DAC peripheral.
struct dac_config config_dac;
2.
Initialize the DAC configuration struct with the module's default values.
dac_get_config_defaults(&config_dac);
3.
Note: This should always be performed before using the configuration struct to ensure that
all values are initialized to known default settings.
Configure the DAC module with starting conversion on event.
#if (SAML21)
dac_instance.start_on_event[DAC_CHANNEL_0] = true;
#else
dac_instance.start_on_event = true;
#endif
4.
Initialize the DAC module.
dac_init(&dac_instance, DAC, &config_dac);
5.
Enable DAC start on conversion mode.
struct dac_events events =
#if (SAML21)
{ .on_event_chan0_start_conversion = true };
#else
{ .on_event_start_conversion = true };
#endif
6.
Enable DAC event.
dac_enable_events(&dac_instance, &events);
6.
Configure the DAC channel.
1. Create a DAC channel configuration struct, which can be filled out to adjust the configuration
of a physical DAC output channel.
struct dac_chan_config config_dac_chan;
2.
Initialize the DAC channel configuration struct with the module's default values.
dac_chan_get_config_defaults(&config_dac_chan);
3.
Note: This should always be performed before using the configuration struct to ensure that
all values are initialized to known default settings.
Configure the DAC channel with the desired channel settings.
dac_chan_set_config(&dac_instance, DAC_CHANNEL_0,
&config_dac_chan);
4.
Enable the DAC channel so that it can output a voltage.
dac_chan_enable(&dac_instance, DAC_CHANNEL_0);
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
33
7.
Enable DAC module.
dac_enable(&dac_instance);
8.
Configure the RTC module.
1. Create an RTC module event struct, which can be filled out to adjust the configuration of a
physical RTC peripheral.
struct rtc_count_events
2.
rtc_event;
Create an RTC module configuration struct, which can be filled out to adjust the configuration
of a physical RTC peripheral.
struct rtc_count_config config_rtc_count;
3.
Initialize the RTC configuration struct with the module's default values.
rtc_count_get_config_defaults(&config_rtc_count);
4.
Note: This should always be performed before using the configuration struct to ensure that
all values are initialized to known default settings.
Change the RTC module configuration to suit the application.
config_rtc_count.prescaler
= RTC_COUNT_PRESCALER_DIV_1;
config_rtc_count.mode
= RTC_COUNT_MODE_16BIT;
#ifdef FEATURE_RTC_CONTINUOUSLY_UPDATED
config_rtc_count.continuously_update = true;
#endif
5.
Initialize the RTC module.
rtc_count_init(&rtc_instance, RTC, &config_rtc_count);
6.
Configure the RTC module with overflow event.
rtc_event.generate_event_on_overflow = true;
7.
Enable RTC module overflow event.
rtc_count_enable_events(&rtc_instance, &rtc_event);
8.
Enable RTC module.
rtc_count_enable(&rtc_instance);
9.
Configure the Event resource.
1. Create an event resource config struct, which can be filled out to adjust the configuration of a
physical event peripheral.
struct events_config event_config;
2.
Initialize the event configuration struct with the module's default values.
events_get_config_defaults(&event_config);
3.
Note: This should always be performed before using the configuration struct to ensure that
all values are initialized to known default settings.
Change the event module configuration to suit the application.
event_config.generator
event_config.edge_detect
event_config.path
event_config.clock_source
=
=
=
=
EVSYS_ID_GEN_RTC_OVF;
EVENTS_EDGE_DETECT_RISING;
EVENTS_PATH_ASYNCHRONOUS;
GCLK_GENERATOR_0;
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
34
4.
Allocate the event resource.
events_allocate(&event_dac, &event_config);
5.
Attach the event resource with user DAC start.
#if (SAML21)
events_attach_user(&event_dac, EVSYS_ID_USER_DAC_START_0);
#else
events_attach_user(&event_dac, EVSYS_ID_USER_DAC_START);
#endif
10. Register and enable the DAC Write Buffer Complete callback handler.
1. Register the user-provided Write Buffer Complete callback function with the driver, so that it
will be run when an asynchronous buffer write job completes.
dac_register_callback(&dac_instance, DAC_CHANNEL_0,
dac_callback,DAC_CALLBACK_TRANSFER_COMPLETE);
2.
Enable the Read Buffer Complete callback so that it will generate callbacks.
dac_chan_enable_callback(&dac_instance, DAC_CHANNEL_0,
DAC_CALLBACK_TRANSFER_COMPLETE);
9.2.2.
Use Case
9.2.2.1.
Code
Copy-paste the following code to your user application:
dac_chan_write_buffer_job(&dac_instance, DAC_CHANNEL_0,
dac_data, DATA_LENGTH);
while (!transfer_is_done) {
/* Wait for transfer done */
}
while (1) {
}
9.2.2.2.
Workflow
1.
Start a DAC conversion and generate a callback when complete.
dac_chan_write_buffer_job(&dac_instance, DAC_CHANNEL_0,
dac_data, DATA_LENGTH);
2.
Wait until the conversion is complete.
while (!transfer_is_done) {
/* Wait for transfer done */
}
3.
Enter an infinite loop once the conversion is complete.
while (1) {
}
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
35
10.
Document Revision History
Doc. Rev.
Date
Comments
42450A
07/2015
Initial document release
Atmel AT11379: SAM Digital-to-Analog (DAC) Driver [APPLICATION NOTE]
Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
36
Atmel Corporation
©
1600 Technology Drive, San Jose, CA 95110 USA
T: (+1)(408) 441.0311
F: (+1)(408) 436.4200
|
www.atmel.com
2015 Atmel Corporation. / Rev.: Atmel-42450A-SAM-Digital-to-Analog-DAC-Driver_AT11379_Application Note-07/2015
®
®
Atmel , Atmel logo and combinations thereof, Enabling Unlimited Possibilities , and others are registered trademarks or trademarks of Atmel Corporation in U.S. and
®
®
other countries. ARM , ARM Connected , and others are registered trademarks of ARM Ltd. Other terms and product names may be trademarks of others.
DISCLAIMER: The information in this document is provided in connection with Atmel products. No license, express or implied, by estoppel or otherwise, to any
intellectual property right is granted by this document or in connection with the sale of Atmel products. EXCEPT AS SET FORTH IN THE ATMEL TERMS AND
CONDITIONS OF SALES LOCATED ON THE ATMEL WEBSITE, ATMEL ASSUMES NO LIABILITY WHATSOEVER AND DISCLAIMS ANY EXPRESS, IMPLIED
OR STATUTORY WARRANTY RELATING TO ITS PRODUCTS INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTY OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
CONSEQUENTIAL, PUNITIVE, SPECIAL OR INCIDENTAL DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS AND PROFITS, BUSINESS
INTERRUPTION, OR LOSS OF INFORMATION) ARISING OUT OF THE USE OR INABILITY TO USE THIS DOCUMENT, EVEN IF ATMEL HAS BEEN ADVISED
OF THE POSSIBILITY OF SUCH DAMAGES. Atmel makes no representations or warranties with respect to the accuracy or completeness of the contents of this
document and reserves the right to make changes to specifications and products descriptions at any time without notice. Atmel does not make any commitment to
update the information contained herein. Unless specifically provided otherwise, Atmel products are not suitable for, and shall not be used in, automotive
applications. Atmel products are not intended, authorized, or warranted for use as components in applications intended to support or sustain life.
SAFETY-CRITICAL, MILITARY, AND AUTOMOTIVE APPLICATIONS DISCLAIMER: Atmel products are not designed for and will not be used in connection with any
applications where the failure of such products would reasonably be expected to result in significant personal injury or death (“Safety-Critical Applications”) without
an Atmel officer's specific written consent. Safety-Critical Applications include, without limitation, life support devices and systems, equipment or systems for the
operation of nuclear facilities and weapons systems. Atmel products are not designed nor intended for use in military or aerospace applications or environments
unless specifically designated by Atmel as military-grade. Atmel products are not designed nor intended for use in automotive applications unless specifically
designated by Atmel as automotive-grade.