Library files for AD9106.

Revision:
1:10838ebbc223
Child:
3:909f157c982e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ad910x.cpp	Wed Mar 03 02:17:58 2021 +0000
@@ -0,0 +1,172 @@
+#include "mbed.h"
+#include "ad910x.h"
+
+extern UnbufferedSerial pc;
+
+AD910x::AD910x(PinName CSB,
+               PinName MOSI,
+               PinName MISO,
+               PinName SCK,
+               PinName RESETB,
+               PinName TRIGGERB) :
+    spi(MOSI, MISO, SCK), csb(CSB), resetb(RESETB), triggerb(TRIGGERB)
+{
+}
+
+/*
+ * @brief Reset AD910x SPI registers to default values
+ * @param none
+ * @return none
+ */
+void AD910x::AD910x_reg_reset()
+{
+    resetb = 0;
+    wait_us( 10 );
+    resetb = 1;
+}
+
+
+/*
+ * @brief Print register address and data in hexadecimal format
+ * @param addr - SPI/SRAM register address
+ * @param data - 16-bit data
+ * @return none
+ */
+void AD910x::print_data( uint16_t addr, uint16_t data )
+{
+    printf( "0x%04X, 0x%04X\n", addr, data );
+}
+
+/*
+ * @brief Write data to SRAM
+ * @param data[] - array of data to be written to SRAM
+ * @return none
+ */
+void AD910x::AD910x_update_sram( int16_t data[] )
+{ 
+    spi_write( 0x001E, 0x0004 );
+    
+    int16_t data_shifted = 0;
+    
+    uint16_t sram_add = 0x6000;
+    
+    for ( int i=0; i<4096; i++ ){
+        data_shifted = data[i] << 4;
+        spi_write( sram_add+i, data_shifted );
+    }
+    
+    spi_write( 0x001E, 0x0010 );   
+}
+
+/*
+ * @brief Read from SRAM and print data
+ * @param n - number of SRAM addresses to be read from
+ * @return none
+ */
+void AD910x::AD910x_print_sram( uint16_t n )
+{
+    spi_write( 0x001E, 0x000C );
+    
+    int16_t data_shifted = 0;
+    
+    uint16_t sram_add = 0x6000;
+    
+    for ( int i=0; i<n; i++ ){
+        data_shifted = spi_read( sram_add+i ) >> 4;
+        print_data( sram_add+i, data_shifted );
+    }
+    
+    spi_write( 0x001E, 0x0010 );
+}
+
+/*
+ * @brief Write to SPI registers, and read and print new register values
+ * @param data[] - array of data to written to SPI registers
+ * @return none
+ */
+void AD910x::AD910x_update_regs( uint16_t data[] ){
+       
+    uint16_t data_display = 0;
+     
+    for ( int i=0; i<66; i++ ){
+        spi_write( reg_add[i], data[i] );
+        data_display = spi_read( reg_add[i] );
+        print_data( reg_add[i], data_display );
+    } 
+}
+
+/*
+ * @brief Start pattern generation by setting AD910x trigger pin to 0
+ * @param none
+ * @return none
+ */
+void AD910x::AD910x_start_pattern()
+{
+    triggerb = 0;
+}
+
+/*
+ * @brief Stop pattern generation by setting AD910x trigger pin to 1
+ * @param none
+ * @return none
+ */
+void AD910x::AD910x_stop_pattern()
+{
+    triggerb = 1;
+}
+
+/*********************************************************/
+// SPI FUNCTIONS 
+/*********************************************************/
+
+/*
+ * @brief Set AD910x SPI word length, mode, frequency
+ * @param reg_len - SPI word length
+ * @param mode - SPI clock polarity, clock and data phase
+ * @param hz - SPI bus frequency in hz
+ * @return none
+ */
+void AD910x::spi_init(uint8_t reg_len, uint8_t mode, uint32_t hz)
+{
+    spi.format( reg_len, mode );
+    spi.frequency( hz );
+}
+
+/*
+ * @brief Write 16-bit data to AD910x SPI/SRAM register
+ * @param addr - SPI/SRAM address
+ * @param data - data to be written to register address
+ * @return none
+ */
+void AD910x::spi_write( uint16_t addr, int16_t data )
+{
+    csb = 0;
+    
+    spi.write( addr );
+    spi.write( data );
+    
+    csb = 1;
+    wait_us( 1 );
+}
+
+/*
+ * @brief Read 16-bit data from AD910x SPI/SRAM register
+ * @param addr - SPI/SRAM address
+ * @return reg_data - data returned by AD910x
+ */
+int16_t AD910x::spi_read( uint16_t addr )
+{
+    csb = 0;
+    
+    uint16_t read_addr;
+    int16_t reg_data;
+    
+    read_addr = 0x8000+addr;
+    spi.write( read_addr );
+    reg_data = spi.write( 0 );
+    
+    csb = 1;
+    wait_us( 1 );
+    
+    return reg_data;
+}
\ No newline at end of file