Library files for AD9106.

Committer:
scabatan
Date:
Mon Jul 19 05:06:33 2021 +0000
Revision:
5:47508d73dad2
Parent:
4:15b1cf1aa2b0
updated CSB pin

Who changed what in which revision?

UserRevisionLine numberNew contents of line
scabatan 4:15b1cf1aa2b0 1 /******************************************************************************
scabatan 4:15b1cf1aa2b0 2 @file: ad910x.cpp
scabatan 4:15b1cf1aa2b0 3
scabatan 4:15b1cf1aa2b0 4 @brief: Implements device-specific SPI and pattern generation functions,
scabatan 4:15b1cf1aa2b0 5 and printing of data from SPI read to text-based user interface
scabatan 4:15b1cf1aa2b0 6 -------------------------------------------------------------------------------
scabatan 4:15b1cf1aa2b0 7 Copyright (c) 2021 Analog Devices, Inc.
scabatan 4:15b1cf1aa2b0 8 All rights reserved.
scabatan 4:15b1cf1aa2b0 9
scabatan 4:15b1cf1aa2b0 10 This software is proprietary to Analog Devices, Inc. and its licensors.
scabatan 4:15b1cf1aa2b0 11 By using this software you agree to the terms of the associated
scabatan 4:15b1cf1aa2b0 12 Analog Devices Software License Agreement.
scabatan 4:15b1cf1aa2b0 13
scabatan 4:15b1cf1aa2b0 14 20210120-LWSC-CTSLA
scabatan 4:15b1cf1aa2b0 15 ******************************************************************************/
scabatan 4:15b1cf1aa2b0 16
scabatan 1:10838ebbc223 17 #include "mbed.h"
scabatan 1:10838ebbc223 18 #include "ad910x.h"
scabatan 1:10838ebbc223 19
scabatan 1:10838ebbc223 20 extern UnbufferedSerial pc;
scabatan 1:10838ebbc223 21
scabatan 1:10838ebbc223 22 AD910x::AD910x(PinName CSB,
scabatan 1:10838ebbc223 23 PinName MOSI,
scabatan 1:10838ebbc223 24 PinName MISO,
scabatan 1:10838ebbc223 25 PinName SCK,
scabatan 1:10838ebbc223 26 PinName RESETB,
scabatan 1:10838ebbc223 27 PinName TRIGGERB) :
scabatan 1:10838ebbc223 28 spi(MOSI, MISO, SCK), csb(CSB), resetb(RESETB), triggerb(TRIGGERB)
scabatan 1:10838ebbc223 29 {
scabatan 1:10838ebbc223 30 }
scabatan 1:10838ebbc223 31
scabatan 1:10838ebbc223 32 /*
scabatan 1:10838ebbc223 33 * @brief Reset AD910x SPI registers to default values
scabatan 1:10838ebbc223 34 * @param none
scabatan 1:10838ebbc223 35 * @return none
scabatan 1:10838ebbc223 36 */
scabatan 1:10838ebbc223 37 void AD910x::AD910x_reg_reset()
scabatan 1:10838ebbc223 38 {
scabatan 1:10838ebbc223 39 resetb = 0;
scabatan 1:10838ebbc223 40 wait_us( 10 );
scabatan 1:10838ebbc223 41 resetb = 1;
scabatan 1:10838ebbc223 42 }
scabatan 1:10838ebbc223 43
scabatan 1:10838ebbc223 44
scabatan 1:10838ebbc223 45 /*
scabatan 1:10838ebbc223 46 * @brief Print register address and data in hexadecimal format
scabatan 1:10838ebbc223 47 * @param addr - SPI/SRAM register address
scabatan 1:10838ebbc223 48 * @param data - 16-bit data
scabatan 1:10838ebbc223 49 * @return none
scabatan 1:10838ebbc223 50 */
scabatan 1:10838ebbc223 51 void AD910x::print_data( uint16_t addr, uint16_t data )
scabatan 1:10838ebbc223 52 {
scabatan 1:10838ebbc223 53 printf( "0x%04X, 0x%04X\n", addr, data );
scabatan 1:10838ebbc223 54 }
scabatan 1:10838ebbc223 55
scabatan 1:10838ebbc223 56 /*
scabatan 1:10838ebbc223 57 * @brief Write data to SRAM
scabatan 1:10838ebbc223 58 * @param data[] - array of data to be written to SRAM
scabatan 1:10838ebbc223 59 * @return none
scabatan 1:10838ebbc223 60 */
scabatan 1:10838ebbc223 61 void AD910x::AD910x_update_sram( int16_t data[] )
scabatan 1:10838ebbc223 62 {
scabatan 1:10838ebbc223 63 spi_write( 0x001E, 0x0004 );
scabatan 1:10838ebbc223 64
scabatan 1:10838ebbc223 65 int16_t data_shifted = 0;
scabatan 1:10838ebbc223 66
scabatan 1:10838ebbc223 67 uint16_t sram_add = 0x6000;
scabatan 1:10838ebbc223 68
scabatan 1:10838ebbc223 69 for ( int i=0; i<4096; i++ ){
scabatan 3:909f157c982e 70 data_shifted = data[i] << 2;
scabatan 1:10838ebbc223 71 spi_write( sram_add+i, data_shifted );
scabatan 1:10838ebbc223 72 }
scabatan 1:10838ebbc223 73
scabatan 1:10838ebbc223 74 spi_write( 0x001E, 0x0010 );
scabatan 1:10838ebbc223 75 }
scabatan 1:10838ebbc223 76
scabatan 1:10838ebbc223 77 /*
scabatan 1:10838ebbc223 78 * @brief Read from SRAM and print data
scabatan 1:10838ebbc223 79 * @param n - number of SRAM addresses to be read from
scabatan 1:10838ebbc223 80 * @return none
scabatan 1:10838ebbc223 81 */
scabatan 1:10838ebbc223 82 void AD910x::AD910x_print_sram( uint16_t n )
scabatan 1:10838ebbc223 83 {
scabatan 1:10838ebbc223 84 spi_write( 0x001E, 0x000C );
scabatan 1:10838ebbc223 85
scabatan 1:10838ebbc223 86 int16_t data_shifted = 0;
scabatan 1:10838ebbc223 87
scabatan 1:10838ebbc223 88 uint16_t sram_add = 0x6000;
scabatan 1:10838ebbc223 89
scabatan 1:10838ebbc223 90 for ( int i=0; i<n; i++ ){
scabatan 3:909f157c982e 91 data_shifted = spi_read( sram_add+i ) >> 2;
scabatan 1:10838ebbc223 92 print_data( sram_add+i, data_shifted );
scabatan 1:10838ebbc223 93 }
scabatan 1:10838ebbc223 94
scabatan 1:10838ebbc223 95 spi_write( 0x001E, 0x0010 );
scabatan 1:10838ebbc223 96 }
scabatan 1:10838ebbc223 97
scabatan 1:10838ebbc223 98 /*
scabatan 1:10838ebbc223 99 * @brief Write to SPI registers, and read and print new register values
scabatan 1:10838ebbc223 100 * @param data[] - array of data to written to SPI registers
scabatan 1:10838ebbc223 101 * @return none
scabatan 1:10838ebbc223 102 */
scabatan 1:10838ebbc223 103 void AD910x::AD910x_update_regs( uint16_t data[] ){
scabatan 1:10838ebbc223 104
scabatan 1:10838ebbc223 105 uint16_t data_display = 0;
scabatan 1:10838ebbc223 106
scabatan 1:10838ebbc223 107 for ( int i=0; i<66; i++ ){
scabatan 1:10838ebbc223 108 spi_write( reg_add[i], data[i] );
scabatan 1:10838ebbc223 109 data_display = spi_read( reg_add[i] );
scabatan 1:10838ebbc223 110 print_data( reg_add[i], data_display );
scabatan 1:10838ebbc223 111 }
scabatan 1:10838ebbc223 112 }
scabatan 1:10838ebbc223 113
scabatan 1:10838ebbc223 114 /*
scabatan 1:10838ebbc223 115 * @brief Start pattern generation by setting AD910x trigger pin to 0
scabatan 1:10838ebbc223 116 * @param none
scabatan 1:10838ebbc223 117 * @return none
scabatan 1:10838ebbc223 118 */
scabatan 1:10838ebbc223 119 void AD910x::AD910x_start_pattern()
scabatan 1:10838ebbc223 120 {
scabatan 1:10838ebbc223 121 triggerb = 0;
scabatan 1:10838ebbc223 122 }
scabatan 1:10838ebbc223 123
scabatan 1:10838ebbc223 124 /*
scabatan 1:10838ebbc223 125 * @brief Stop pattern generation by setting AD910x trigger pin to 1
scabatan 1:10838ebbc223 126 * @param none
scabatan 1:10838ebbc223 127 * @return none
scabatan 1:10838ebbc223 128 */
scabatan 1:10838ebbc223 129 void AD910x::AD910x_stop_pattern()
scabatan 1:10838ebbc223 130 {
scabatan 1:10838ebbc223 131 triggerb = 1;
scabatan 1:10838ebbc223 132 }
scabatan 1:10838ebbc223 133
scabatan 1:10838ebbc223 134 /*********************************************************/
scabatan 1:10838ebbc223 135 // SPI FUNCTIONS
scabatan 1:10838ebbc223 136 /*********************************************************/
scabatan 1:10838ebbc223 137
scabatan 1:10838ebbc223 138 /*
scabatan 1:10838ebbc223 139 * @brief Set AD910x SPI word length, mode, frequency
scabatan 1:10838ebbc223 140 * @param reg_len - SPI word length
scabatan 1:10838ebbc223 141 * @param mode - SPI clock polarity, clock and data phase
scabatan 1:10838ebbc223 142 * @param hz - SPI bus frequency in hz
scabatan 1:10838ebbc223 143 * @return none
scabatan 1:10838ebbc223 144 */
scabatan 1:10838ebbc223 145 void AD910x::spi_init(uint8_t reg_len, uint8_t mode, uint32_t hz)
scabatan 1:10838ebbc223 146 {
scabatan 1:10838ebbc223 147 spi.format( reg_len, mode );
scabatan 1:10838ebbc223 148 spi.frequency( hz );
scabatan 1:10838ebbc223 149 }
scabatan 1:10838ebbc223 150
scabatan 1:10838ebbc223 151 /*
scabatan 1:10838ebbc223 152 * @brief Write 16-bit data to AD910x SPI/SRAM register
scabatan 1:10838ebbc223 153 * @param addr - SPI/SRAM address
scabatan 1:10838ebbc223 154 * @param data - data to be written to register address
scabatan 1:10838ebbc223 155 * @return none
scabatan 1:10838ebbc223 156 */
scabatan 1:10838ebbc223 157 void AD910x::spi_write( uint16_t addr, int16_t data )
scabatan 1:10838ebbc223 158 {
scabatan 1:10838ebbc223 159 csb = 0;
scabatan 1:10838ebbc223 160
scabatan 1:10838ebbc223 161 spi.write( addr );
scabatan 1:10838ebbc223 162 spi.write( data );
scabatan 1:10838ebbc223 163
scabatan 1:10838ebbc223 164 csb = 1;
scabatan 1:10838ebbc223 165 wait_us( 1 );
scabatan 1:10838ebbc223 166 }
scabatan 1:10838ebbc223 167
scabatan 1:10838ebbc223 168 /*
scabatan 1:10838ebbc223 169 * @brief Read 16-bit data from AD910x SPI/SRAM register
scabatan 1:10838ebbc223 170 * @param addr - SPI/SRAM address
scabatan 1:10838ebbc223 171 * @return reg_data - data returned by AD910x
scabatan 1:10838ebbc223 172 */
scabatan 1:10838ebbc223 173 int16_t AD910x::spi_read( uint16_t addr )
scabatan 1:10838ebbc223 174 {
scabatan 1:10838ebbc223 175 csb = 0;
scabatan 1:10838ebbc223 176
scabatan 1:10838ebbc223 177 uint16_t read_addr;
scabatan 1:10838ebbc223 178 int16_t reg_data;
scabatan 1:10838ebbc223 179
scabatan 1:10838ebbc223 180 read_addr = 0x8000+addr;
scabatan 1:10838ebbc223 181 spi.write( read_addr );
scabatan 1:10838ebbc223 182 reg_data = spi.write( 0 );
scabatan 1:10838ebbc223 183
scabatan 1:10838ebbc223 184 csb = 1;
scabatan 1:10838ebbc223 185 wait_us( 1 );
scabatan 1:10838ebbc223 186
scabatan 1:10838ebbc223 187 return reg_data;
scabatan 1:10838ebbc223 188 }