firmware for the SOLID Slow Control Module for SM1
Dependencies: S_SCTRL_SMlib adc_ad9249 mbed sscm_comm AD5384 SWSPI T_adt7320
Diff: main.cpp
- Revision:
- 4:009703f995c6
- Parent:
- 3:badf265a8898
- Child:
- 5:4177f8012a25
diff -r badf265a8898 -r 009703f995c6 main.cpp --- a/main.cpp Sun Oct 05 17:13:02 2014 +0000 +++ b/main.cpp Tue Oct 14 17:11:31 2014 +0000 @@ -12,15 +12,23 @@ * v 1.35 added version read for software modules (comm, T , ADC , DAC SWSPI) * v 1.36 added ini1 ini2 srst commands for DAC * v 1.37 new get Version class + * v 1.40 added init ( dac) for all connectors (2) + * v 1.50 added broadcast for DAC channels ( 1.. 32 ) + * v 1.51 added set bias (digital) commands + * v 1.54 added hardware DAC reset in init , added hw reset call for DAC + * v 1.55 removed decode message , messages on the ADC commands + * v 1.60 added set cal values fire call , error codes corrected + * v 1.61 corrected BIAS channel, introduced DEIMOS32.h */ -#define VERSION "1.37" +#define VERSION "1.63" #include "SWSPI_BI.h" #include "solid_sctrl_def.h" #include "S_SCTRL_SM1_PinDef.h" #include "S_SCTRL_SM1_hwfunct.h" +#include "DEIMOS32.h" #include "AD9249.h" #include "AD5384.h" #include "adt7320.h" @@ -84,14 +92,19 @@ // initalize ADC classes AD9249 adc[2][2]={AD9249( &spi_adc,hwl.csb1[0]), AD9249( &spi_adc,hwl.csb2[0]), AD9249( &spi_adc2,hwl.csb1[1]), AD9249 ( &spi_adc2,hwl.csb2[1])}; - AD5384 dac[2][1]={AD5384(&spi,hwl.dac_cs[0]), AD5384(&spi2,hwl.dac_cs[1]) }; - + AD5384 dac[2][1]={AD5384(&spi,hwl.dac_cs[0],hwl.dac_rst[0]), AD5384(&spi2,hwl.dac_cs[1],hwl.dac_rst[1]) }; adt7320 temp[2][3]= { adt7320(&spi, hwl.t_cs[0]),adt7320(&spi, hwl.tc_cs1[0]),adt7320(&spi, hwl.tc_cs2[0]), adt7320(&spi2, hwl.t_cs[1]),adt7320(&spi2, hwl.tc_cs1[1]),adt7320(&spi2, hwl.tc_cs2[1]) }; pc.printf("\nSOLID SLOW CONTROL for SM1 version %s %s %s \n\r",VERSION,__DATE__,__TIME__ ); + + for (u8 cc= 1; cc < 3 ; cc++) { + dac[cc-1][0].init1(); + + } + cmdready=false; while (1) { wait(0.5); @@ -99,19 +112,29 @@ if (cmdready) { cmdready=false; int decresult=decode_cmd(cmdin,&cmd); - printf("decode result = %d \n\r" ,decresult); - if( decresult){ cmd.status=abs(decresult); encode_cmd ( cmdoutstr, &cmd); continue; } + //printf("decode result = %d \n\r" ,decresult); + if( decresult){ + decresult=abs(decresult); + u8 errcode=(u8)decresult ; + errcode = 0xE0 + errcode; + cmd.status=errcode; + encode_cmd ( cmdoutstr, &cmd); pc.printf( "%s", cmdoutstr); + continue; + } + + u8 do8; // dataout u16 do16; + int chc=0, stch=0 ,endch=0; cmd.status=1; // use it for the moment as error handling , switch ( cmd.dev) { - case ADC : + case ADC : { cmd.status=2; - pc.printf("ADC cmd = %s \n\r",cmd.cmd); - pc.printf("check now ranges %d %d \n\r",cmd.con, cmd.devnr); + //pc.printf("ADC cmd = %s \n\r",cmd.cmd); + //pc.printf("check now ranges %d %d \n\r",cmd.con, cmd.devnr); if (!strcmp( cmd.cmd, "spa1")) { adc[cmd.con-1][cmd.devnr-1].setPattern1(cmd.datain);cmd.dataout=cmd.datain;cmd.status=0;} if (!strcmp( cmd.cmd, "spa2")) { adc[cmd.con-1][cmd.devnr-1].setPattern2(cmd.datain);cmd.dataout=cmd.datain;cmd.status=0;} if (!strcmp( cmd.cmd, "rpa1")) { adc[cmd.con-1][cmd.devnr-1].readPattern1(do16 ); cmd.dataout=do16; cmd.status=0; } @@ -124,18 +147,56 @@ if (!strcmp( cmd.cmd, "gscv")) {do16=adc[cmd.con-1][cmd.devnr-1].getSrcVersion();cmd.dataout=do16; cmd.status=0;} if (!strcmp( cmd.cmd, "ini1")) { adc[cmd.con-1][cmd.devnr-1].init1();cmd.dataout=cmd.datain;cmd.status=0;} if (!strcmp( cmd.cmd, "ini2")) { adc[cmd.con-1][cmd.devnr-1].init2();cmd.dataout=cmd.datain;cmd.status=0;} - break; - case DAC : - cmd.status=2; - if (!strcmp( cmd.cmd, "sdac")) { dac[cmd.con-1][cmd.devnr-1].set_dac(cmd.ch,cmd.datain);cmd.dataout=cmd.datain;cmd.status=0;} - if (!strcmp( cmd.cmd, "rdac")) { do16=dac[cmd.con-1][cmd.devnr-1].get_dac(cmd.ch);cmd.dataout=do16;cmd.status=0;} - if (!strcmp( cmd.cmd, "ini1")) { dac[cmd.con-1][cmd.devnr-1].init1();cmd.dataout=cmd.datain;cmd.status=0;} - if (!strcmp( cmd.cmd, "ini2")) { dac[cmd.con-1][cmd.devnr-1].init2();cmd.dataout=cmd.datain;cmd.status=0;} - if (!strcmp( cmd.cmd, "srst")) { dac[cmd.con-1][cmd.devnr-1].soft_rst();cmd.dataout=cmd.datain;cmd.status=0;} - if (!strcmp( cmd.cmd, "ghrv")) {do16=dac[cmd.con-1][cmd.devnr-1].getHdrVersion();cmd.dataout=do16; cmd.status=0;} - if (!strcmp( cmd.cmd, "gscv")) {do16=dac[cmd.con-1][cmd.devnr-1].getSrcVersion();cmd.dataout=do16; cmd.status=0;} + }break; + case DAC :{ + cmd.status=2; + if (!strcmp( cmd.cmd, "ini1")) { dac[cmd.con-1][cmd.devnr-1].init1();cmd.dataout=cmd.datain;cmd.status=0; goto DACENDCMD;} + if (!strcmp( cmd.cmd, "ini2")) { dac[cmd.con-1][cmd.devnr-1].init2();cmd.dataout=cmd.datain;cmd.status=0; goto DACENDCMD;} + if (!strcmp( cmd.cmd, "srst")) { dac[cmd.con-1][cmd.devnr-1].soft_rst();cmd.dataout=cmd.datain;cmd.status=0;goto DACENDCMD;} + if (!strcmp( cmd.cmd, "hrst")) { dac[cmd.con-1][cmd.devnr-1].hw_rst();cmd.dataout=cmd.datain;cmd.status=0;goto DACENDCMD;} + if (!strcmp( cmd.cmd, "gctr")) { do16=dac[cmd.con-1][cmd.devnr-1].get_ctrl();cmd.dataout=do16;cmd.status=0;goto DACENDCMD;} + if (!strcmp( cmd.cmd, "ghrv")) { do16=dac[cmd.con-1][cmd.devnr-1].getHdrVersion();cmd.dataout=do16; cmd.status=0;goto DACENDCMD;} + if (!strcmp( cmd.cmd, "gscv")) { do16=dac[cmd.con-1][cmd.devnr-1].getSrcVersion();cmd.dataout=do16; cmd.status=0;goto DACENDCMD;} + // set output register bias channel + if (!strcmp( cmd.cmd, "sbid")) { cmd.ch=DACBIASCH;dac[cmd.con-1][cmd.devnr-1].set_dac(cmd.ch-1,cmd.datain);cmd.dataout=cmd.datain;cmd.status=0;goto DACENDCMD;} + if (!strcmp( cmd.cmd, "gbid")) {cmd.ch=DACBIASCH;do16=dac[cmd.con-1][cmd.devnr-1].get_dac(cmd.ch-1);cmd.dataout=do16;cmd.status=0;goto DACENDCMD;} + // set CAL level values + if (!strcmp( cmd.cmd, "scll")) { + if( cmd.ch !=0) { stch=cmd.ch+DACCAL1CH-1; endch=cmd.ch+DACCAL1CH; } else { stch=DACCAL1CH; endch=DACCAL1CH+4;}; + for (chc= stch ; chc < endch; chc++){ + cmd.ch=chc; + dac[cmd.con-1][cmd.devnr-1].set_dac(cmd.ch-1,cmd.datain);cmd.dataout=cmd.datain;cmd.status=0; + } + goto DACENDCMD; + } - break; + if (!strcmp( cmd.cmd, "gcll")){ + if( cmd.ch !=0) { stch=cmd.ch+DACCAL1CH-1; endch=cmd.ch+DACCAL1CH; } else { stch=DACCAL1CH; endch=DACCAL1CH+4;}; + for (chc= stch ; chc < endch; chc++){ + cmd.ch=chc; + do16=dac[cmd.con-1][cmd.devnr-1].get_dac(cmd.ch-1);cmd.dataout=do16;cmd.status=0; + } + goto DACENDCMD; + } + + + // channel related commands + if( cmd.ch !=0) { stch=cmd.ch-1; endch=cmd.ch; } else { stch=0; endch=31;}; + if (!strcmp( cmd.cmd, "sdac")) { + for (chc= stch ; chc < endch; chc++){ + dac[cmd.con-1][cmd.devnr-1].set_dac(chc,cmd.datain);cmd.dataout=cmd.datain;cmd.status=0; + } + goto DACENDCMD; + } + // next is not very usefull for multiple channels + if (!strcmp( cmd.cmd, "rdac")) { + for (chc= stch ; chc < endch; chc++){ + do16=dac[cmd.con-1][cmd.devnr-1].get_dac(chc);cmd.dataout=do16;cmd.status=0; + } + goto DACENDCMD; + } + DACENDCMD : ; + }break; case TEMP : cmd.status=2; if (!strcmp( cmd.cmd, "rtpd")){ do16=temp[cmd.con-1][cmd.devnr-1].get_T();cmd.dataout=do16;cmd.status=0;} if (!strcmp( cmd.cmd, "gtid")){ do8=temp[cmd.con-1][cmd.devnr-1].getId();cmd.dataout=do8;cmd.status=0;} @@ -148,19 +209,34 @@ break; case SSCM: cmd.status=2; - if (!strcmp( cmd.cmd, "t_hb")) { heartbeat=!heartbeat;cmd.status=2;} + // generate internal CAL + if (!strcmp( cmd.cmd, "acal")){toggle_cal(hwl,cmd.ch );cmd.status=0;} + // heartbeat + if (!strcmp( cmd.cmd, "t_hb")) { heartbeat=!heartbeat;cmd.status=0;} + //get main version if (!strcmp( cmd.cmd, "gmpv")) {do16=gv.getHdrVersion();cmd.dataout=do16; cmd.status=0;} - + // get module serial nr + if (!strcmp( cmd.cmd, "msnr")) {do8=get_serialnr(&hwl);cmd.dataout=(u16)do8; cmd.status=0;} + // get version module version if (!strcmp( cmd.cmd, "gvhv")) {do16=gvc.getHdrVersion();cmd.dataout=do16; cmd.status=0;} - if (!strcmp( cmd.cmd, "msnr")) {do8=get_serialnr(&hwl);cmd.dataout=(u16)do8; cmd.status=0;} + if (!strcmp( cmd.cmd, "gvsv")) {do16=gvc.getSrcVersion();cmd.dataout=do16; cmd.status=0;} + // get communication module version if (!strcmp( cmd.cmd, "gchv")) {do16=gvsscm.getHdrVersion();cmd.dataout=do16; cmd.status=0;} if (!strcmp( cmd.cmd, "gcsv")) {do16=gvsscm.getSrcVersion();cmd.dataout=do16; cmd.status=0;} + // get spi module version + if (!strcmp( cmd.cmd, "gshv")) {do16=spi.getHdrVersion();cmd.dataout=do16; cmd.status=0;} + if (!strcmp( cmd.cmd, "gssv")) {do16=spi.getSrcVersion();cmd.dataout=do16; cmd.status=0;} + // get bispi module version + if (!strcmp( cmd.cmd, "gbhv")) {do16=spi_adc.getHdrVersion();cmd.dataout=do16; cmd.status=0;} + if (!strcmp( cmd.cmd, "gbsv")) {do16=spi_adc.getSrcVersion();cmd.dataout=do16; cmd.status=0;} + + break; default : cmd.status=1; break; } // end switch - encode_cmd ( cmdoutstr, &cmd); + encode_cmd ( cmdoutstr, &cmd); pc.printf( "%s", cmdoutstr); }//end if cmdready else {