DAC Drivers

  • include/nuttx/analog/dac.h. All structures and APIs needed to work with DAtC drivers are provided in this header file. This header file includes:

    1. Structures and inerface descriptions needed to develop a low-level, architecture-specific, DAC driver.

    2. To register the DAC driver with a common DAC character driver.

    3. Interfaces needed for interfacing user programs with the common DAC character driver.

  • drivers/analog/dac.c. The implementation of the common DAC character driver.

Application Programming Interface

The first necessary thing to be done in order to use the DAC driver from an application is to include the correct header filer. It contains the Application Programming Interface to the PWM driver. To do so, include

#include <nuttx/analog/dac.h>

DAC driver is registered as a POSIX character device driver into /dev namespace. It is necessary to open the device to get a file descriptor for further operations. This can be done with standard POSIX open() call.

Standard POSIX write() call is used to send data from an application to a controller. Structure dac_msg_s is used to pass the data/samples.

struct dac_msg_s
begin_packed_struct struct dac_msg_s
{
  /* The 8-bit DAC Channel */
  uint8_t      am_channel;
  /* DAC convert result (4 bytes) */
  int32_t      am_data;
} end_packed_struct;

Application Example

An example application can be found in nuttx-apps repository under path examples/dac. It provides command line interface to write data to DAC channels.s

Configuration

This section describes DAC driver configuration in Kconfig. The reader should refer to target documentation for target specific configuration.

The peripheral is enabled by CONFIG_ANALOG and CONFIG_DAC options, respectively. The FIFO queue size is configurable with CONFIG_DAC_FIFOSIZE. This size is limited to 255 to fit into uint8_t.

External Devices

NuttX also provides support for various external DAC devices. These usually communicates with MCU with I2C or SPI peripherals.