AD9083 no-OS Driver
Supported Devices
Overview
The AD9083 is a 16-channel, 125MHz bandwidth continuous-time sigma-delta (CTSD) analog-to-digital converter (ADC) that incorporates an integrated programmable single-pole antialiasing filter and termination resistor. It is designed to offer low power consumption and a compact form factor, ensuring ease of use for a wide range of applications. Each ADC core is composed of a first-order CTSD modulator, embedded background nonlinearity correction, and self-cancelling dither to accommodate wide bandwidth differential inputs. The device features a built-in voltage reference, cascaded integrator comb (CIC) filter, and a quadrature digital downconverter (DDC) with FIR decimation filters. It delivers high-speed Subclass 1 JESD204B serialized output, configurable in various lane arrangements, and supports synchronization across multiple devices. Additionally, the AD9083 provides flexible power-down options and is programmable via a 1.8V compatible 3-wire SPI interface. It operates within a temperature range of −40°C to +85°C and is available in a 100-ball CSP_BGA package.
Applications
Millimeter wave imaging
Electronic beam forming and phased arrays
Multichannel wireless receivers
Electronic support measures
Operation Modes
Mode Name |
Description |
Typical Use Case |
AD9083_JESD_TX_TEST_MODE_DISABLED |
Disable Test Mode for the JESD transmitter. |
Use when no test mode is necessary. |
|
||
AD9083_JESD_TX_TEST_MODE_WORD_TOGGLE |
Word Toggle Test Mode for toggling word patterns. |
Verification of JESD interface by toggling words. |
AD9083_JESD_TX_TEST_MODE_PN31 |
PN31 Test Mode for sending pseudo-random binary sequence data. |
Performance testing using pseudo-random data. |
AD9083_JESD_TX_TEST_MODE_PN15 |
PN15 Test Mode based on pseudo-random patterns. |
Used in scenarios requiring less complexity than PN31. |
AD9083_JESD_TX_TEST_MODE_PN7 |
PN7 Test Mode operating with simplified pseudo-random patterns. |
For less extensive testing environments. |
AD9083_JESD_TX_TEST_MODE_RAMP |
Ramp Test Mode simulating ramping data stream. |
Simulation of continuous increase in data which aids in buffer testing. |
AD9083_JESD_TX_TEST_MODE_USER_REPEAT |
Repeated User Data Test Mode for sending same data patterns repeated over time. |
Validation with known static patterns repeated over time. |
AD9083_JESD_TX_TEST_MODE_USER_SINGLE |
Single Time User Data Test Mode for one-off pattern testing. |
Used for transient data verification. |
Device Configuration
Initialization and Configuration
The ad9083.c
file encompasses critical functions necessary for the
initialization and configuration of the AD9083 device. The
ad9083_init
function facilitates device preparation by allocating
required resources, configuring GPIOs and SPI communication, and
validating the chip ID against expected values. Subsequently, it invokes
the ad9083_setup
function to establish parameters such as clock
settings and ADC configurations based on a specified configuration
index. During the setup process, the function executes a software reset
and device initialization, while also adjusting JESD204 subclass
settings as required. The ad9083_remove
function ensures proper
resource deallocation by releasing memory and removing SPI and GPIO
descriptors when the device is no longer in use.
Register and SPI Communication
SPI communication is facilitated through functions like
ad9083_reg_get
and ad9083_reg_set
, which handle reading and
writing to device registers. ad9083_reg_get
uses the device’s SPI
descriptor to read a specified register, while ad9083_reg_set
writes
a value to a register. Both ensure valid addresses and handle errors.
The ad9083_spi_xfer
function manages data flow during SPI transfers,
checking data sizes and ensuring communication success.
Utility
Utility functions in the file support the AD9083’s management and
operation. ad9083_log_write
logs messages by severity levels,
including warnings and errors. ad9083_udelay
provides
microsecond-level delays for synchronizing operations, and
ad9083_reset_pin_ctrl
manages the device’s reset state via GPIOs,
enabling programmatic resets. These utilities support robust operation
and debugging.
Driver Initialization Example
#include "ad9083.h"
#include "no_os_spi.h"
#include "no_os_gpio.h"
// Define the initialization parameters
struct ad9083_init_param init_param = {
.spi_init = {
.max_speed_hz = 1000000,
.chip_select = 0,
.mode = NO_OS_SPI_MODE_0,
.extra = NULL,
},
.gpio_reset = {
.number = 0,
.extra = NULL,
},
.some_settings = 0, // Add any device-specific settings here
};
int main(void) {
struct ad9083_dev *dev;
int ret;
// Initialize the device
ret = ad9083_init(&dev, &init_param);
if (ret) {
printf("Initialization failed!\n");
return ret;
}
// Use the device (e.g., read data, configure settings)
// ...
// Clean up
ad9083_remove(dev);
return 0;
}