no-OS
Classes | Functions
ad9528.c File Reference

Implementation of AD9528 Driver. More...

#include <stdlib.h>
#include <limits.h>
#include <stdio.h>
#include "no_os_print_log.h"
#include "no_os_alloc.h"
#include "no_os_error.h"
#include "no_os_util.h"
#include "no_os_clk.h"
#include "ad9528.h"
#include "jesd204.h"
Include dependency graph for ad9528.c:

Classes

struct  ad9528_jesd204_priv
 

Functions

int32_t ad9528_spi_read (struct ad9528_dev *dev, uint32_t reg_addr, uint32_t *reg_data)
 Reads the value of the selected register. More...
 
int32_t ad9528_spi_write (struct ad9528_dev *dev, uint32_t reg_addr, uint32_t reg_data)
 Writes a value to the selected register. More...
 
int32_t ad9528_spi_read_n (struct ad9528_dev *dev, uint32_t reg_addr, uint32_t *reg_data)
 Reads the value of the selected register. More...
 
int32_t ad9528_spi_write_n (struct ad9528_dev *dev, uint32_t reg_addr, uint32_t reg_data)
 Writes a value to the selected register. More...
 
int32_t ad9528_poll (struct ad9528_dev *dev, uint32_t reg_addr, uint32_t mask, uint32_t data)
 Poll register. More...
 
int32_t ad9528_io_update (struct ad9528_dev *dev)
 Updates the AD9528 configuration. More...
 
int32_t ad9528_sync (struct ad9528_dev *dev)
 Updates the AD9528 configuration. More...
 
int32_t ad9528_init (struct ad9528_init_param *init_param)
 Initializes the AD9528. More...
 
int32_t ad9528_clk_recalc_rate (struct no_os_clk_desc *desc, uint64_t *rate)
 Get the current frequency of the clock. More...
 
int32_t ad9528_setup (struct ad9528_dev **device, struct ad9528_init_param init_param)
 Initializes the AD9528. More...
 
int32_t ad9528_remove (struct ad9528_dev *dev)
 Free the resources allocated by ad9528_setup(). More...
 
uint32_t ad9528_calc_out_div (uint32_t rate, uint32_t parent_rate)
 Calculate the output channel divider. More...
 
uint32_t ad9528_clk_round_rate (struct ad9528_dev *dev, uint32_t chan, uint32_t rate)
 Calculate closest possible rate. More...
 
int32_t ad9528_clk_set_rate (struct ad9528_dev *dev, uint32_t chan, uint32_t rate)
 Set channel rate. More...
 
int32_t ad9528_reset (struct ad9528_dev *dev)
 Performs a hard reset on the AD9528. More...
 

Detailed Description

Implementation of AD9528 Driver.

Author
DBogdan (drago.nosp@m.s.bo.nosp@m.gdan@.nosp@m.anal.nosp@m.og.co.nosp@m.m)

Copyright 2015-2016(c) Analog Devices, Inc.

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. Neither the name of Analog Devices, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANALOG DEVICES, INC. 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.

Function Documentation

◆ ad9528_calc_out_div()

uint32_t ad9528_calc_out_div ( uint32_t  rate,
uint32_t  parent_rate 
)

Calculate the output channel divider.

Parameters
rate- The desired rate.
parent_rate- The parent rate.
Returns
The output divider.

◆ ad9528_clk_recalc_rate()

int32_t ad9528_clk_recalc_rate ( struct no_os_clk_desc desc,
uint64_t *  rate 
)

Get the current frequency of the clock.

Parameters
desc- The CLK descriptor.
rate- The CLK rate.
Returns
0 in case of success, negative error code otherwise.

◆ ad9528_clk_round_rate()

uint32_t ad9528_clk_round_rate ( struct ad9528_dev dev,
uint32_t  chan,
uint32_t  rate 
)

Calculate closest possible rate.

Parameters
dev- is a pointer to the ad9528_dev data structure.
chan- The output channel.
rate- The desired rate.
Returns
The closest possible rate of desired rate.
Here is the caller graph for this function:

◆ ad9528_clk_set_rate()

int32_t ad9528_clk_set_rate ( struct ad9528_dev dev,
uint32_t  chan,
uint32_t  rate 
)

Set channel rate.

Parameters
dev- is a pointer to the ad9528_dev data structure.
chan- Channel number.
rate- Channel rate in Hz.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad9528_init()

int32_t ad9528_init ( struct ad9528_init_param init_param)

Initializes the AD9528.

Parameters
init_param- The structure containing the device initial parameters.
Returns
Returns 0 in case of success or negative error code.
Here is the caller graph for this function:

◆ ad9528_io_update()

int32_t ad9528_io_update ( struct ad9528_dev dev)

Updates the AD9528 configuration.

Parameters
dev- The device structure.
Returns
Returns 0 in case of success or negative error code.
Here is the caller graph for this function:

◆ ad9528_poll()

int32_t ad9528_poll ( struct ad9528_dev dev,
uint32_t  reg_addr,
uint32_t  mask,
uint32_t  data 
)

Poll register.

Parameters
dev- The device structure.
reg_addr- The address of the register.
mask- The mask that is applied.
data- The expected data.
Returns
Returns 0 in case of success or negative error code.
Here is the caller graph for this function:

◆ ad9528_remove()

int32_t ad9528_remove ( struct ad9528_dev dev)

Free the resources allocated by ad9528_setup().

Parameters
dev- The device structure.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad9528_reset()

int32_t ad9528_reset ( struct ad9528_dev dev)

Performs a hard reset on the AD9528.

Parameters
devis a pointer to the ad9528_dev data structure.
Returns
Returns 0 for success, negative value for failure.

◆ ad9528_setup()

int32_t ad9528_setup ( struct ad9528_dev **  device,
struct ad9528_init_param  init_param 
)

Initializes the AD9528.

Parameters
device- The device structure.
init_param- The structure containing the device initial parameters.
Returns
Returns 0 in case of success or negative error code.
Here is the caller graph for this function:

◆ ad9528_spi_read()

int32_t ad9528_spi_read ( struct ad9528_dev dev,
uint32_t  reg_addr,
uint32_t *  reg_data 
)

Reads the value of the selected register.

Parameters
dev- The device structure.
reg_addr- The address of the register to read
reg_data- The register's value.
Returns
Returns 0 in case of success or negative error code.

◆ ad9528_spi_read_n()

int32_t ad9528_spi_read_n ( struct ad9528_dev dev,
uint32_t  reg_addr,
uint32_t *  reg_data 
)

Reads the value of the selected register.

Parameters
dev- The device structure.
reg_addr- The address of the register to read - address[31:16] holds the number of bytes to read (a round about method)– it is also limited to 4 bytes max (to fill in a 32 bit integer type).
reg_data- The register's value.
Returns
Returns 0 in case of success or negative error code.
Here is the caller graph for this function:

◆ ad9528_spi_write()

int32_t ad9528_spi_write ( struct ad9528_dev dev,
uint32_t  reg_addr,
uint32_t  reg_data 
)

Writes a value to the selected register.

Parameters
dev- The device structure.
reg_addr- The address of the register to write
reg_data- The value to write to the register.
Returns
Returns 0 in case of success or negative error code.

◆ ad9528_spi_write_n()

int32_t ad9528_spi_write_n ( struct ad9528_dev dev,
uint32_t  reg_addr,
uint32_t  reg_data 
)

Writes a value to the selected register.

Parameters
dev- The device structure.
reg_addr- The address of the register to write - address[31:16] holds the number of bytes to write (a round about method)– it is also limited to 4 bytes max (to fill in a 32 bit integer type).
reg_data- The value to write to the register.
Returns
Returns 0 in case of success or negative error code.
Here is the caller graph for this function:

◆ ad9528_sync()

int32_t ad9528_sync ( struct ad9528_dev dev)

Updates the AD9528 configuration.

Parameters
dev- The device structure.
Returns
Returns 0 in case of success or negative error code.