Library files for EVAL-AD910x

Dependents:   EVAL-AD910x

Committer:
scabatan
Date:
Fri Mar 26 12:20:54 2021 +0000
Revision:
3:909f157c982e
Parent:
1:10838ebbc223
Child:
4:15b1cf1aa2b0
Few improvements on SRAM read and write functions

Who changed what in which revision?

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