AD5384 DAC.

Fork of AD5384 by wimbeaumont Project

Revision:
3:0d930c475e72
Parent:
1:d2d6341d3e97
--- a/AD5384.cpp	Sun Oct 05 17:10:03 2014 +0000
+++ b/AD5384.cpp	Tue Oct 07 21:17:50 2014 +0000
@@ -59,182 +59,155 @@
 
 
 
-AD5384::AD5384(SWSPI *spiinterface ,DigitalOut* chipselect):getVersion( VERSION_AD5384_HDR,AD5384_SRC_VERSION, __TIME__, __DATE__) {
-        vref=2.5; 
-        spi=spiinterface; 
-        cs=chipselect;
-        for ( int nc=0 ; nc < nrch; nc++){
-            gain[nc]=0x3FFE;
-            offset[nc]=0x2000;
-        } 
-    };
+AD5384::AD5384(SWSPI * spiinterface, DigitalOut * chipselect):
+    getVersion(VERSION_AD5384_HDR, AD5384_SRC_VERSION, __TIME__, __DATE__)
+{
+    vref = 2.5; 
+    spi = spiinterface; 
+    cs = chipselect;
+    for (int nc = 0; nc < nrch; nc++) {
+        gain[nc] = 0x3FFE;
+        offset[nc] = 0x2000;
+    } 
+};
     
-    u16  AD5384::calculate_dac_setting(u8 nr, float vout ) {  
+u16 AD5384::calculate_dac_setting(u8 nr, float vout) {  
     //Vout = 2 * Vref * x2 / 2^n  =>  x2 = Vout * 2^14 /(2 * Vref) 
     // x2 is loaded to the DAC string  
     // x1 is the 14 bit DAC wordt written to the DAC input register 
-                if( nr >39 ) return 0;
-                float x2= vout * p2_14 /(2 *vref);
+    if (nr > 39) return 0;
+    float x2 = vout * p2_14 / (2 * vref);
     //  x2 = [(gain+2)/2^n * x1] + offset-2^13               
     // x1 = 2^14/(gain+2) *  [ x2 - offset+2^13 ]
-                u16 x1 = p2_14/(gain[nr]+1) *( x2- offset[nr]+p2_13);
-                x1= 0x3FFF & x1;
-                dac[nr]=x1 ;
-                return x1;
-             };
-
+    u16 x1 = p2_14 / (gain[nr] + 1) * (x2 - offset[nr] + p2_13);
+    x1 = 0x3FFF & x1;
+    dac[nr] = x1;
+    return x1;
+};
 
-u32 AD5384::format_word(u8 mode,u8 ch,u8 rw,u16 data) {
-      // not clear what is the MSB bit ,set  it to zero
-            u32 shift = (u32) rw&1;            
-            u32 word= shift << 22;
-           
-            shift= (u32)(ch &0x1F);
-            shift = shift << 16;
-            word = word | shift;
-           
-            shift= (u32)(mode & 0x3);
-            shift = shift << 14;
-            word = word | shift;
-            
-            word = word | (data & 0x3FFF);
-           
-            return word;
+u32 AD5384::format_word(u8 mode, u8 ch, u8 rw, u16 data) {
+    // not clear what is the MSB bit ,set  it to zero
+    u32 shift = (u32) rw & 1;            
+    u32 word = shift << 22;
+    shift = (u32) (ch & 0x1F);
+    shift = shift << 16;
+    word = word | shift;
+    shift = (u32) (mode & 0x3);
+    shift = shift << 14;
+    word = word | shift;        
+    word = word | (data & 0x3FFF);       
+    return word;
 }
-             
-void AD5384::set_spi_mode(){
-    spi->format(24,1);
+
+void AD5384::set_spi_mode() {
+    spi->format(24, 1);
     spi->frequency(10000000);             
 }
              
- u16 AD5384::set_volt(u8 ch, float vout ){
-     volt[ch]=vout;
-     u16 dacin=calculate_dac_setting(ch,  vout );
+ u16 AD5384::set_volt(u8 ch, float vout) {
+     volt[ch] = vout;
+     u16 dacin = calculate_dac_setting(ch, vout);
      set_spi_mode();
-     u32 data=format_word(M_DATA_R,ch,0,dacin); 
+     u32 data = format_word(M_DATA_R, ch, 0, dacin); 
      cs->write(C_ACTIVE);
      spi->write(data);
      cs->write(C_DEACTIVE);   
      return dacin;
 }
 
-void  AD5384::init1(){
-        u16 ctrlreg=0;
-        ctrlreg = (INT_REF_2500 | REF_SRC_INT ) & TOGGLE_DISABLE;
-       set_reg(M_SPEC_R,CTRL_REG_ADDR,ctrlreg); 
-   
+void  AD5384::init1() {
+    u16 ctrlreg = 0;
+    ctrlreg = (INT_REF_2500 | REF_SRC_INT ) & TOGGLE_DISABLE;
+    set_reg(M_SPEC_R, CTRL_REG_ADDR, ctrlreg);    
 } 
 
-void  AD5384::init2(){
-        u16 ctrlreg=0;
-        // implecite INT_REF_1250
-        ctrlreg =  REF_SRC_INT  & TOGGLE_DISABLE;
-       set_reg(M_SPEC_R,CTRL_REG_ADDR,ctrlreg); 
-   
+void  AD5384::init2() {
+    u16 ctrlreg = 0;
+    // implecite INT_REF_1250
+    ctrlreg =  REF_SRC_INT  & TOGGLE_DISABLE;
+    set_reg(M_SPEC_R, CTRL_REG_ADDR, ctrlreg);  
 }
 
-
-
-u32  AD5384::soft_clr(){
-      return set_reg(M_SPEC_R,0x02,0x2000);
+u32  AD5384::soft_clr() {
+    return set_reg(M_SPEC_R, 0x02, 0x2000);
 } 
 
-
-u32  AD5384::soft_rst(){
-      return set_reg(M_SPEC_R,0x0F,0x211F);
+u32  AD5384::soft_rst() {
+    return set_reg(M_SPEC_R, 0x0F, 0x211F);
 } 
 
-
-u32  AD5384::clear_code(){
-    return set_reg(M_SPEC_R,0x01,0x2000);
- }
+u32  AD5384::clear_code() {
+    return set_reg(M_SPEC_R, 0x01, 0x2000);
+}
  
-u16  AD5384::set_gain(u8 ch, u16 gain  ){
-     set_reg(M_GAIN_R,ch,gain);
-     return gain;
+u16  AD5384::set_gain(u8 ch, u16 gain) {
+    set_reg(M_GAIN_R, ch, gain);
+    return gain;
 } 
 
-u16  AD5384::set_offset(u8 ch, u16 gain  ){
-     set_reg(M_OFFS_R,ch,gain);
-     return gain;
-} 
-
-
-u16 AD5384::set_dac(u8 ch, u16 dac  ){
-     set_reg(M_DATA_R,ch,dac);
-     return dac;
+u16  AD5384::set_offset(u8 ch, u16 gain){
+    set_reg(M_OFFS_R, ch, gain);
+    return gain;
 } 
 
 
+u16 AD5384::set_dac(u8 ch, u16 dac){
+    set_reg(M_DATA_R, ch, dac);
+    return dac;
+} 
 
-
+u32  AD5384::set_reg(u8 mode, u8 ch, u16 value){
+    set_spi_mode();
+    value = value & 0x3FFF;
+    u32 data = format_word(mode, ch, 0, value); 
+    cs->write(C_ACTIVE);
+    spi->write(data);
+    cs->write(C_DEACTIVE);   
+    return data;
+}     
  
- u32  AD5384::set_reg(u8 mode,u8 ch, u16 value  ){
-     set_spi_mode();
-     value=value & 0x3FFF;
-     u32 data=format_word(mode,ch,0,value); 
-     cs->write(C_ACTIVE);
-     spi->write(data);
-     cs->write(C_DEACTIVE);   
-     return data;
- }     
- 
- u16 AD5384::get_reg(u8 mode, u8 ch   ){
-     set_spi_mode();
-     u32 data=format_word(mode,ch,1,0);
-     cs->write(C_ACTIVE);
-     spi->write(data);
-     cs->write(C_DEACTIVE);
-     wait( .00001);
-     cs->write(C_ACTIVE);
-     data=spi->write(NOP_INST);
-     cs->write(C_DEACTIVE);
-     return (u16) data;
+u16 AD5384::get_reg(u8 mode, u8 ch   ){
+    set_spi_mode();
+    u32 data = format_word(mode, ch, 1, 0);
+    cs->write(C_ACTIVE);
+    spi->write(data);
+    cs->write(C_DEACTIVE);
+    wait(0.00001);
+    cs->write(C_ACTIVE);
+    data=spi->write(NOP_INST);
+    cs->write(C_DEACTIVE);
+    return (u16) data;
 }
  
- u16  AD5384::get_gain(u8 ch  ){
-    return get_reg(M_GAIN_R,ch);
-     
+u16 AD5384::get_gain(u8 ch) {
+    return get_reg(M_GAIN_R, ch); 
 }    
 
-u16 AD5384::get_dac(u8 ch){
-    return get_reg(M_DATA_R,ch);
-     
+u16 AD5384::get_dac(u8 ch) {
+    return get_reg(M_DATA_R, ch);
 }   
-       
-       
-       
-       
- u16  AD5384::get_offset(u8 ch  ){
-    return get_reg(M_OFFS_R,ch);
-     
+
+u16  AD5384::get_offset(u8 ch) {
+    return get_reg(M_OFFS_R, ch);
 }        
 
 u32  AD5384::get_ctrl(){
-    
     return get_reg(M_SPEC_R, 0x0C);   
 }    
 
-  
- 
-   
 u16 AD5384::get_ch_out_reg(u8 ch) {
-     u32 data=format_word(M_DATA_R,ch,1,0);
-     cs->write(C_ACTIVE);
-     spi->write(data);
-     cs->write(C_DEACTIVE);
-     wait( .00001);
-     cs->write(C_ACTIVE);
-     data=spi->write(NOP_INST);
-     cs->write(C_DEACTIVE);
-     return (u16) data;
+    u32 data=format_word(M_DATA_R,ch,1,0);
+    cs->write(C_ACTIVE);
+    spi->write(data);
+    cs->write(C_DEACTIVE);
+    wait(0.00001);
+    cs->write(C_ACTIVE);
+    data = spi->write(NOP_INST);
+    cs->write(C_DEACTIVE);
+    return (u16) data;
 }    
 
-
-
-
-
-#include "sscm_comm.h" 
+#include "sscm_comm.h"  // Weird place for an include
 /*
  
 u16 AD5384::get_src_version_nr(){