Library files for EVAL-AD910x
ad910x.cpp@5:47508d73dad2, 2021-07-19 (annotated)
- 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?
User | Revision | Line number | New 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 | } |