Library files for EVAL-AD910x
ad910x.cpp@1:10838ebbc223, 2021-03-03 (annotated)
- Committer:
- scabatan
- Date:
- Wed Mar 03 02:17:58 2021 +0000
- Revision:
- 1:10838ebbc223
- Child:
- 3:909f157c982e
Initial commit
Who changed what in which revision?
User | Revision | Line number | New 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 | 1:10838ebbc223 | 54 | data_shifted = data[i] << 4; |
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 | 1:10838ebbc223 | 75 | data_shifted = spi_read( sram_add+i ) >> 4; |
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 | } |