firmware for the SOLID Slow Control Module for SM1
Dependencies: S_SCTRL_SMlib adc_ad9249 mbed sscm_comm AD5384 SWSPI T_adt7320
main.cpp@0:dcd70d1b89b1, 2014-09-24 (annotated)
- Committer:
- wbeaumont
- Date:
- Wed Sep 24 10:31:28 2014 +0000
- Revision:
- 0:dcd70d1b89b1
- Child:
- 1:f792767b2223
Initial firmware version SOLID Slow Contrl Module for SM1 ; "working " for ADC communication, not tested with DEIMOS board
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wbeaumont | 0:dcd70d1b89b1 | 1 | #include "mbed.h" |
wbeaumont | 0:dcd70d1b89b1 | 2 | |
wbeaumont | 0:dcd70d1b89b1 | 3 | |
wbeaumont | 0:dcd70d1b89b1 | 4 | #include "SWSPI_BI.h" |
wbeaumont | 0:dcd70d1b89b1 | 5 | |
wbeaumont | 0:dcd70d1b89b1 | 6 | #include "AD9249.h" |
wbeaumont | 0:dcd70d1b89b1 | 7 | #include "solid_sctrl_def.h" |
wbeaumont | 0:dcd70d1b89b1 | 8 | #include "S_SCTRL_SM1_PinDef.h" |
wbeaumont | 0:dcd70d1b89b1 | 9 | #include "S_SCTRL_SM1_hwfunct.h" |
wbeaumont | 0:dcd70d1b89b1 | 10 | |
wbeaumont | 0:dcd70d1b89b1 | 11 | #define VERSION "1.07" |
wbeaumont | 0:dcd70d1b89b1 | 12 | |
wbeaumont | 0:dcd70d1b89b1 | 13 | #define DEBUGPF(x) printf((x)); |
wbeaumont | 0:dcd70d1b89b1 | 14 | |
wbeaumont | 0:dcd70d1b89b1 | 15 | |
wbeaumont | 0:dcd70d1b89b1 | 16 | #define MAXCMDLLENGTH 256 |
wbeaumont | 0:dcd70d1b89b1 | 17 | |
wbeaumont | 0:dcd70d1b89b1 | 18 | #include "sscm_comm.h" |
wbeaumont | 0:dcd70d1b89b1 | 19 | using namespace sscm_comm ; |
wbeaumont | 0:dcd70d1b89b1 | 20 | |
wbeaumont | 0:dcd70d1b89b1 | 21 | |
wbeaumont | 0:dcd70d1b89b1 | 22 | |
wbeaumont | 0:dcd70d1b89b1 | 23 | Serial pc(USBTX,USBRX); |
wbeaumont | 0:dcd70d1b89b1 | 24 | |
wbeaumont | 0:dcd70d1b89b1 | 25 | |
wbeaumont | 0:dcd70d1b89b1 | 26 | char cmdin[MAXCMDLLENGTH]; |
wbeaumont | 0:dcd70d1b89b1 | 27 | u8 cmdready; |
wbeaumont | 0:dcd70d1b89b1 | 28 | bool cmdstart=false; |
wbeaumont | 0:dcd70d1b89b1 | 29 | |
wbeaumont | 0:dcd70d1b89b1 | 30 | |
wbeaumont | 0:dcd70d1b89b1 | 31 | |
wbeaumont | 0:dcd70d1b89b1 | 32 | |
wbeaumont | 0:dcd70d1b89b1 | 33 | void pc_callback() { |
wbeaumont | 0:dcd70d1b89b1 | 34 | // Note: you need to actually read from the serial to clear the RX interrupt |
wbeaumont | 0:dcd70d1b89b1 | 35 | static unsigned char cnt; |
wbeaumont | 0:dcd70d1b89b1 | 36 | |
wbeaumont | 0:dcd70d1b89b1 | 37 | char c; |
wbeaumont | 0:dcd70d1b89b1 | 38 | c=pc.getc(); |
wbeaumont | 0:dcd70d1b89b1 | 39 | if( c== CMDSTART && !cmdready ) { cnt=0; cmdstart=true; cmdready=false; } |
wbeaumont | 0:dcd70d1b89b1 | 40 | if ( cmdstart) { |
wbeaumont | 0:dcd70d1b89b1 | 41 | cmdin[cnt]=c; cnt++; |
wbeaumont | 0:dcd70d1b89b1 | 42 | if (c== CMDSTOP ) { cmdready=true;} |
wbeaumont | 0:dcd70d1b89b1 | 43 | } |
wbeaumont | 0:dcd70d1b89b1 | 44 | |
wbeaumont | 0:dcd70d1b89b1 | 45 | |
wbeaumont | 0:dcd70d1b89b1 | 46 | |
wbeaumont | 0:dcd70d1b89b1 | 47 | //printf("%c:",c ); |
wbeaumont | 0:dcd70d1b89b1 | 48 | } |
wbeaumont | 0:dcd70d1b89b1 | 49 | |
wbeaumont | 0:dcd70d1b89b1 | 50 | |
wbeaumont | 0:dcd70d1b89b1 | 51 | |
wbeaumont | 0:dcd70d1b89b1 | 52 | |
wbeaumont | 0:dcd70d1b89b1 | 53 | int main() { |
wbeaumont | 0:dcd70d1b89b1 | 54 | pc.attach(pc_callback); |
wbeaumont | 0:dcd70d1b89b1 | 55 | ssc_cmd cmd; |
wbeaumont | 0:dcd70d1b89b1 | 56 | int i = 0; |
wbeaumont | 0:dcd70d1b89b1 | 57 | HWlines hwl ; |
wbeaumont | 0:dcd70d1b89b1 | 58 | assignports( &hwl ); |
wbeaumont | 0:dcd70d1b89b1 | 59 | setdefault(hwl ); |
wbeaumont | 0:dcd70d1b89b1 | 60 | |
wbeaumont | 0:dcd70d1b89b1 | 61 | |
wbeaumont | 0:dcd70d1b89b1 | 62 | SWSPI_BI spi_adc(hwl.msio[0],hwl.direction[0],hwl.stio_mo[0] ,hwl.sclk[0]); // msio, dir , sclk |
wbeaumont | 0:dcd70d1b89b1 | 63 | SWSPI_BI spi_adc2(hwl.msio[1],hwl.direction[1],hwl.stio_mo[1],hwl.sclk[1]); // msio, dir , sclk |
wbeaumont | 0:dcd70d1b89b1 | 64 | // initalize ADC classes |
wbeaumont | 0:dcd70d1b89b1 | 65 | AD9249 adc[2][2]={AD9249( &spi_adc,hwl.csb1[0]), AD9249( &spi_adc,hwl.csb2[0]), |
wbeaumont | 0:dcd70d1b89b1 | 66 | AD9249( &spi_adc2,hwl.csb1[1]), AD9249 ( &spi_adc2,hwl.csb2[1])}; |
wbeaumont | 0:dcd70d1b89b1 | 67 | |
wbeaumont | 0:dcd70d1b89b1 | 68 | |
wbeaumont | 0:dcd70d1b89b1 | 69 | |
wbeaumont | 0:dcd70d1b89b1 | 70 | |
wbeaumont | 0:dcd70d1b89b1 | 71 | |
wbeaumont | 0:dcd70d1b89b1 | 72 | |
wbeaumont | 0:dcd70d1b89b1 | 73 | |
wbeaumont | 0:dcd70d1b89b1 | 74 | pc.printf("\nSOLID SLOW CONTROL for SM1 version %s %s %s \n\r",VERSION,__DATE__,__TIME__ ); |
wbeaumont | 0:dcd70d1b89b1 | 75 | cmdready=false; |
wbeaumont | 0:dcd70d1b89b1 | 76 | while (1) { |
wbeaumont | 0:dcd70d1b89b1 | 77 | wait(0.5); |
wbeaumont | 0:dcd70d1b89b1 | 78 | if (cmdready) { |
wbeaumont | 0:dcd70d1b89b1 | 79 | cmdready=false; |
wbeaumont | 0:dcd70d1b89b1 | 80 | int decresult=decode_cmd(cmdin,&cmd); |
wbeaumont | 0:dcd70d1b89b1 | 81 | printf("decode result = %d \n\r" ,decresult); |
wbeaumont | 0:dcd70d1b89b1 | 82 | if( decresult){ continue; } |
wbeaumont | 0:dcd70d1b89b1 | 83 | ; |
wbeaumont | 0:dcd70d1b89b1 | 84 | char cmdoutstr[100]; |
wbeaumont | 0:dcd70d1b89b1 | 85 | |
wbeaumont | 0:dcd70d1b89b1 | 86 | u8 do8; // dataout |
wbeaumont | 0:dcd70d1b89b1 | 87 | u16 do16; |
wbeaumont | 0:dcd70d1b89b1 | 88 | cmd.dataout=0xFFFF; // use it for the moment as error handling , |
wbeaumont | 0:dcd70d1b89b1 | 89 | if ( cmd.dev == DAC ) {} ; |
wbeaumont | 0:dcd70d1b89b1 | 90 | if (cmd.dev == ADC) { |
wbeaumont | 0:dcd70d1b89b1 | 91 | pc.printf("ADC cmd = %s \n\r",cmd.cmd); |
wbeaumont | 0:dcd70d1b89b1 | 92 | pc.printf("check now ranges %d %d \n\r",cmd.con, cmd.devnr); |
wbeaumont | 0:dcd70d1b89b1 | 93 | if (!strcmp( cmd.cmd, "spa1")) { adc[cmd.con-1][cmd.devnr-1].setPattern1(cmd.datain);cmd.dataout=cmd.datain;} |
wbeaumont | 0:dcd70d1b89b1 | 94 | if (!strcmp( cmd.cmd, "spa2")) { adc[cmd.con-1][cmd.devnr-1].setPattern2(cmd.datain);cmd.dataout=cmd.datain;} |
wbeaumont | 0:dcd70d1b89b1 | 95 | if (!strcmp( cmd.cmd, "rpa1")) { adc[cmd.con-1][cmd.devnr-1].readPattern1(do16 ); cmd.dataout=(u32)do16; } |
wbeaumont | 0:dcd70d1b89b1 | 96 | if (!strcmp( cmd.cmd, "rr08")) {adc[cmd.con-1][cmd.devnr-1].readReg8(cmd.ch,do8 ); cmd.dataout=(u32)do8; } |
wbeaumont | 0:dcd70d1b89b1 | 97 | if (!strcmp( cmd.cmd, "rr16")) {adc[cmd.con-1][cmd.devnr-1].readReg16(cmd.ch,do16 ); cmd.dataout=(u32)do16; } |
wbeaumont | 0:dcd70d1b89b1 | 98 | if (!strcmp( cmd.cmd, "sr08")) { adc[cmd.con-1][cmd.devnr-1].setReg8(cmd.ch, (u8)cmd.dataout ); cmd.dataout=cmd.datain; } |
wbeaumont | 0:dcd70d1b89b1 | 99 | if (!strcmp( cmd.cmd, "sr16")) { adc[cmd.con-1][cmd.devnr-1].setReg16(cmd.ch, (u16)cmd.dataout ); cmd.dataout=cmd.datain; } |
wbeaumont | 0:dcd70d1b89b1 | 100 | } // end if ADC |
wbeaumont | 0:dcd70d1b89b1 | 101 | encode_cmd ( cmdoutstr, &cmd); |
wbeaumont | 0:dcd70d1b89b1 | 102 | pc.printf( "%s", cmdoutstr); |
wbeaumont | 0:dcd70d1b89b1 | 103 | }//end if cmdready |
wbeaumont | 0:dcd70d1b89b1 | 104 | else { |
wbeaumont | 0:dcd70d1b89b1 | 105 | printf( "%s\n\r",cmdin); |
wbeaumont | 0:dcd70d1b89b1 | 106 | } |
wbeaumont | 0:dcd70d1b89b1 | 107 | }// end while |
wbeaumont | 0:dcd70d1b89b1 | 108 | |
wbeaumont | 0:dcd70d1b89b1 | 109 | } |