This is an old revision of the document!
The project is located under no-OS/projects/adrv9009
and has the following layout, with source code under the src
subdirectory and reference profiles obtained with TES software under profiles
subdirectory.
$ tree no-OS/projects/adrv9009 ├── Makefile ├── profiles │ ├── tx_bw100_ir122p88_rx_bw100_or122p88_orx_bw100_or122p88_dc122p88 │ │ ├── talise_config_ad9528.h │ │ ├── talise_config.c │ │ └── talise_config.h │ ├── tx_bw200_ir245p76_rx_bw200_or245p76_orx_bw200_or245p76_dc245p76 │ │ ├── talise_config_ad9528.h │ │ ├── talise_config.c │ │ └── talise_config.h │ └── tx_bw400_ir491p52_rx_bw200_or245p76_orx_bw400_or491p52_dc245p76 │ ├── talise_config_ad9528.h │ ├── talise_config.c │ └── talise_config.h ├── src │ ├── app │ │ ├── app_clocking.c │ │ ├── app_clocking.h │ │ ├── app_config.h │ │ ├── app_jesd.c │ │ ├── app_jesd.h │ │ ├── app_talise.c │ │ ├── app_talise.h │ │ ├── app_transceiver.c │ │ ├── app_transceiver.h │ │ └── headless.c │ ├── devices │ │ └── adi_hal │ │ ├── adi_hal.h │ │ ├── common.h │ │ ├── LICENSE.txt │ │ ├── no_os_hal.c │ │ └── parameters.h │ └── README └── src.mk
The ADRV9009 driver may be found under no-OS/drivers/rf-transceiver/talise/api
and the firmware files under no-OS/drivers/rf-transceiver/talise/firmware
.
You may use the TES software to generate profiles and corresponding Stream Binary by graphically selecting Tools → Create Script → Init .c Files
. This will generate a directory containing the following files:
├── headless.c ├── headless.h ├── talise_config_ad9528.h ├── talise_config.c ├── talise_config.h └── TaliseStream.bin
Using the new profile can be achieved by creating a new directory under no-OS/adrv9009/profiles
directory and copying the 3 talise_config*
files to it and selecting it in the build system.
Let's say our profile directory is called new_profile
, we may select it for build by making sure the PROFILE
make variable in src.mk
file points to it:
PROFILE = new_profile
After obtaining a TaliseStream.bin
file from the TES GUI, this can be converted to a header file via this Linux command.
$ xxd -i TaliseStream.bin > talise_stream_binary.h
Should you want to use this generated file, replace no-OS/drivers/rf-transceiver/talise/firmware/talise_stream_binary.h
with it.
Clone NO-OS with the --recursive
flag:
git clone --recursive https://github.com/analogdevicesinc/no-OS
If however you've already cloned NO-OS without the --recursive
flag, you may initialize all the submodules in an existing NO-OS clone with:
git submodule update --recursive --init
Prior to building a no-OS project, it is required to set up some environment variables so that the build process may find the necessary tools (compiler, linker, SDK etc.).
Use the following commands to prepare your environment for building no-OS projects:
Go in the project directory that should be built.
The build process creates a build directory in the project folder:
build ├── app ├── bsp ├── obj ├── project_name.elf └── tmp
Once the .elf
, .hex
or .bin
file has been generated, make sure the board is powered on, JTAG cable connected and use the following commands to upload the program to the board or debug.
Uploading the binary to target is generically achieved with:
$ make run
Use the following command to launch the SDK associated to the used platform in order to be able to debug graphically by clicking the debug button:
$ make sdkopen
Fore more details about the available make rules, check out this page.
The project builds by default for ADRV9009-W/PCBZ with whatever carrier is specified in the hardware files (.hdf or .sopcinfo/.sof).
AD-FMCOMMS8-EBZ support on ZCU102 may be enabled by adding -DFMCOMMS8_ZCU102
compiler flag or uncommenting the define in src/app/app_config.h
.
ADRV9009-ZU11EG support on ADRV2CRR-FMC may be enabled by adding -DZU11EG
compiler flag or uncommenting the define in src/app/app_config.h
.
We strongly recommend you use the command line build instructions above but if you would like to perform a manual and graphical project configuration, you may follow the following legacy build guides for Intel platforms or Xilinx platforms.
DMA_EXAMPLE is a standard example that sends a sinewave on Tx channels using DMA from a lookup table. If you physically loopback a Tx channel to an Rx channel via an electrical wire, you may run the DMA_EXAMPLE and read the received data at Rx from particular memory address.
To build the DMA_EXAMPLE demo, edit the Makefile and add -DDMA_EXAMPLE to CFLAGS and rebuild. Alternatively, you may simply add a #define DMA_EXAMPLE in a suitable place in code and rebuild.
To run the DMA_EXAMPLE, you simply need to run the application as usual by:
The application will eventually print something like this:
DMA_EXAMPLE: address=0x7f170 samples=65536 channels=4 bits=16
This means that the memory address where the data at Rx is stored is 0x7f170, there are in total 65536 samples, 16-bit wide across 4 channels, which is equivalent to 16384, 16-bit samples per channel.
At this point you may use a Tcl script to retrieve data from memory and store it into .csv files for processing. In the terminal where you built the project, run the following command while being in the no-OS/projects/project_name folder
for Zynq-7000: xsct ../../tools/scripts/platform/xilinx/capture.tcl ZYNQ_PS7 0x7f170 65536 4 16 for ZynqMP: xsct ../../tools/scripts/platform/xilinx/capture.tcl ZYNQ_PSU 0x7f170 65536 4 16 for Versal: xsct ../../tools/scripts/platform/xilinx/capture.tcl VERSAL 0x7f170 65536 4 16
After running the xsct command, some .csv files will be created in your directory. Now you need to run the Python script for plotting, specifying the number of channels you want to plot, like this:
python3 ../../tools/scripts/platform/xilinx/plot.py 4
and a plot window will open showing the Rx channels.