SOLID SM1 slow control module test program
Dependencies: S_SCTRL_SMlib mbed
main.cpp@1:39fce38f6e13, 2014-09-16 (annotated)
- Committer:
- wbeaumont
- Date:
- Tue Sep 16 19:36:53 2014 +0000
- Revision:
- 1:39fce38f6e13
- Parent:
- 0:263895dd3670
- Child:
- 2:0d1f510b851d
tested with all functions working
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wbeaumont | 1:39fce38f6e13 | 1 | /* program to test the hardware connection of the Slow control board |
wbeaumont | 1:39fce38f6e13 | 2 | * for the SM1 of SOLID |
wbeaumont | 1:39fce38f6e13 | 3 | * |
wbeaumont | 1:39fce38f6e13 | 4 | * v1.x used for testing first board |
wbeaumont | 1:39fce38f6e13 | 5 | * v2.01 make use of libs and structure for io, not tested with hw. |
wbeaumont | 1:39fce38f6e13 | 6 | */ |
wbeaumont | 1:39fce38f6e13 | 7 | |
wbeaumont | 1:39fce38f6e13 | 8 | |
wbeaumont | 1:39fce38f6e13 | 9 | |
wbeaumont | 1:39fce38f6e13 | 10 | |
wbeaumont | 0:263895dd3670 | 11 | #include "mbed.h" |
wbeaumont | 0:263895dd3670 | 12 | #include "S_SCTRL_SM1_PinDef.h" |
wbeaumont | 1:39fce38f6e13 | 13 | #include "S_SCTRL_SM1_hwfunct.h" |
wbeaumont | 1:39fce38f6e13 | 14 | #define VERSION "2.08" |
wbeaumont | 1:39fce38f6e13 | 15 | #define RELDATE "16 Sept 2014" |
wbeaumont | 0:263895dd3670 | 16 | #define ORGANISATION "(C) Universiteit Antwerpen" |
wbeaumont | 0:263895dd3670 | 17 | #define AUTHOR "wim.beaumont@uantwerpen.be" |
wbeaumont | 0:263895dd3670 | 18 | |
wbeaumont | 0:263895dd3670 | 19 | |
wbeaumont | 0:263895dd3670 | 20 | Serial pc(USBTX,USBRX); |
wbeaumont | 0:263895dd3670 | 21 | |
wbeaumont | 0:263895dd3670 | 22 | |
wbeaumont | 0:263895dd3670 | 23 | char c='.'; |
wbeaumont | 0:263895dd3670 | 24 | void callback() { |
wbeaumont | 0:263895dd3670 | 25 | // Note: you need to actually read from the serial to clear the RX interrupt |
wbeaumont | 0:263895dd3670 | 26 | c = pc.getc(); |
wbeaumont | 0:263895dd3670 | 27 | //printf("%c:",c ); |
wbeaumont | 0:263895dd3670 | 28 | } |
wbeaumont | 0:263895dd3670 | 29 | |
wbeaumont | 0:263895dd3670 | 30 | |
wbeaumont | 0:263895dd3670 | 31 | |
wbeaumont | 0:263895dd3670 | 32 | void printhelp(){ |
wbeaumont | 0:263895dd3670 | 33 | printf("program to test IO lines for the Solid Slow control \n\r"); |
wbeaumont | 0:263895dd3670 | 34 | printf("version : %s\n\r%s %s \n\rAuthor %s\n\r",VERSION, ORGANISATION,RELDATE,AUTHOR ); |
wbeaumont | 0:263895dd3670 | 35 | printf("in terminal push t to see the commands\n\r"); |
wbeaumont | 0:263895dd3670 | 36 | printf("the assigned output will toggle, z will stop toggling outputs \n\r"); |
wbeaumont | 0:263895dd3670 | 37 | printf("inputs will be read each cycle, also the bi directional inputs \n\r"); |
wbeaumont | 0:263895dd3670 | 38 | printf("no protection for the directions signals (c,d,m,l) so use with care\n\r"); |
wbeaumont | 1:39fce38f6e13 | 39 | printf("startup values:\n\r\tmsio(2) input\n\r\tdirection(2) set to input\n\r\tstio_mo to input (adc output)\n\r"); |
wbeaumont | 0:263895dd3670 | 40 | |
wbeaumont | 0:263895dd3670 | 41 | } |
wbeaumont | 0:263895dd3670 | 42 | |
wbeaumont | 0:263895dd3670 | 43 | |
wbeaumont | 0:263895dd3670 | 44 | |
wbeaumont | 0:263895dd3670 | 45 | void printcommands(int consel, DigitalOut* caldir) { |
wbeaumont | 0:263895dd3670 | 46 | int localcaldir=caldir->read(); |
wbeaumont | 0:263895dd3670 | 47 | printf("T means toggle output\n\r"); |
wbeaumont | 0:263895dd3670 | 48 | printf("connector 1 or connector 2 signal generation \n\r"); |
wbeaumont | 0:263895dd3670 | 49 | printf("a: T sclk\tb: T direction\n\r"); |
wbeaumont | 0:263895dd3670 | 50 | printf("c: T stio_mo\td: T csb1_1\n\r"); |
wbeaumont | 0:263895dd3670 | 51 | printf("e: T csb2_1\tf: T mosi\n\r"); |
wbeaumont | 0:263895dd3670 | 52 | printf("g: T t_cs\ti: T tc_cs1\n\r"); |
wbeaumont | 0:263895dd3670 | 53 | printf("h: help\n\r"); |
wbeaumont | 0:263895dd3670 | 54 | printf("j: T tc_cs2\tk: T dac_cs\n\r"); |
wbeaumont | 0:263895dd3670 | 55 | printf("l: T dac_rst\tm: T cal_13\n\r"); |
wbeaumont | 0:263895dd3670 | 56 | printf("n: T cal_24\to: T genextcal\n\r"); |
wbeaumont | 0:263895dd3670 | 57 | printf("\n\rcommon\n\r"); |
wbeaumont | 0:263895dd3670 | 58 | printf("q: sel int cal\tr: sel ext cal\n\r"); |
wbeaumont | 0:263895dd3670 | 59 | printf("s: setdefault direction, cal int \n\r"); |
wbeaumont | 0:263895dd3670 | 60 | printf("t: this table\n\r"); |
wbeaumont | 1:39fce38f6e13 | 61 | printf("v: version, serialnr "); |
wbeaumont | 0:263895dd3670 | 62 | printf("x: sel con1\ty: sel con2\n\r"); |
wbeaumont | 0:263895dd3670 | 63 | printf("z: stop toggling\n\r"); |
wbeaumont | 0:263895dd3670 | 64 | printf("con sel=%d cal dir=%d\n\r",consel, localcaldir); |
wbeaumont | 0:263895dd3670 | 65 | |
wbeaumont | 0:263895dd3670 | 66 | } |
wbeaumont | 0:263895dd3670 | 67 | |
wbeaumont | 0:263895dd3670 | 68 | |
wbeaumont | 0:263895dd3670 | 69 | |
wbeaumont | 0:263895dd3670 | 70 | |
wbeaumont | 0:263895dd3670 | 71 | int main(){ |
wbeaumont | 0:263895dd3670 | 72 | |
wbeaumont | 1:39fce38f6e13 | 73 | pc.attach(&callback);// handles the input on the RS232 interface |
wbeaumont | 1:39fce38f6e13 | 74 | HWlines hwl ; |
wbeaumont | 1:39fce38f6e13 | 75 | assignports( &hwl ); |
wbeaumont | 0:263895dd3670 | 76 | DigitalOut* dout = 0; // active signal |
wbeaumont | 1:39fce38f6e13 | 77 | hwl.ledred->write(1); |
wbeaumont | 1:39fce38f6e13 | 78 | hwl.ledgreen->write(1); |
wbeaumont | 1:39fce38f6e13 | 79 | int consel=1; //active connector |
wbeaumont | 1:39fce38f6e13 | 80 | setdefault(hwl); |
wbeaumont | 0:263895dd3670 | 81 | printhelp(); |
wbeaumont | 0:263895dd3670 | 82 | while (true) { |
wbeaumont | 1:39fce38f6e13 | 83 | int con_idx=consel-1; |
wbeaumont | 1:39fce38f6e13 | 84 | if( con_idx <0 or con_idx>1 ){ printf("no valid connector %d\n\r",consel); continue;} |
wbeaumont | 1:39fce38f6e13 | 85 | |
wbeaumont | 1:39fce38f6e13 | 86 | switch( c) { |
wbeaumont | 1:39fce38f6e13 | 87 | case 'a' : dout=hwl.sclk[con_idx]; break; |
wbeaumont | 1:39fce38f6e13 | 88 | case 'b' : dout=hwl.direction[con_idx]; break; |
wbeaumont | 1:39fce38f6e13 | 89 | case 'c' : dout=NULL; hwl.msio[con_idx]->write(1); break; |
wbeaumont | 1:39fce38f6e13 | 90 | case 'd' : dout=hwl.csb1[con_idx]; break; |
wbeaumont | 1:39fce38f6e13 | 91 | case 'e' : dout=hwl.csb2[con_idx]; break; |
wbeaumont | 1:39fce38f6e13 | 92 | case 'f' : dout=hwl.mosi[con_idx]; break; |
wbeaumont | 1:39fce38f6e13 | 93 | case 'g' : dout=hwl.t_cs[con_idx]; break; |
wbeaumont | 1:39fce38f6e13 | 94 | case 'i' : dout=hwl.tc_cs1[con_idx]; break; |
wbeaumont | 1:39fce38f6e13 | 95 | case 'j' : dout=hwl.tc_cs2[con_idx]; break; |
wbeaumont | 1:39fce38f6e13 | 96 | case 'k' : dout=hwl.dac_cs[con_idx]; break; |
wbeaumont | 1:39fce38f6e13 | 97 | case 'l' : dout=hwl.dac_rst[con_idx]; break; |
wbeaumont | 1:39fce38f6e13 | 98 | case 'm' : dout=hwl.cal13[con_idx]; break; |
wbeaumont | 1:39fce38f6e13 | 99 | case 'n' : dout=hwl.cal24[con_idx]; break; |
wbeaumont | 1:39fce38f6e13 | 100 | case 'o' : dout=hwl.calgenext; break; |
wbeaumont | 1:39fce38f6e13 | 101 | case 'p' : dout=NULL; hwl.msio[con_idx]->write(0); break; |
wbeaumont | 0:263895dd3670 | 102 | default : break; |
wbeaumont | 0:263895dd3670 | 103 | |
wbeaumont | 0:263895dd3670 | 104 | |
wbeaumont | 0:263895dd3670 | 105 | |
wbeaumont | 0:263895dd3670 | 106 | |
wbeaumont | 0:263895dd3670 | 107 | } |
wbeaumont | 1:39fce38f6e13 | 108 | |
wbeaumont | 0:263895dd3670 | 109 | |
wbeaumont | 0:263895dd3670 | 110 | //common |
wbeaumont | 0:263895dd3670 | 111 | switch( c) { |
wbeaumont | 0:263895dd3670 | 112 | case 'h' : printhelp();wait(5); |
wbeaumont | 1:39fce38f6e13 | 113 | case 'q' : setcalsource(0,hwl); break; |
wbeaumont | 1:39fce38f6e13 | 114 | case 'r' : setcalsource(1,hwl); break; |
wbeaumont | 1:39fce38f6e13 | 115 | case 's' : setdefault(hwl); break; |
wbeaumont | 1:39fce38f6e13 | 116 | case 't' : printcommands(consel, hwl.calint[0] ); wait(5);break; |
wbeaumont | 1:39fce38f6e13 | 117 | case 'u' : set_bi_spi_mo(1,hwl.msio[con_idx],hwl.stio_mo[con_idx],hwl.direction[con_idx]); |
wbeaumont | 1:39fce38f6e13 | 118 | break; |
wbeaumont | 0:263895dd3670 | 119 | case 'v' : printf ("version %s comiled at %s %s\n\r" , VERSION,__DATE__,__TIME__); |
wbeaumont | 1:39fce38f6e13 | 120 | printf("%s",hwfunct_lib_version()); |
wbeaumont | 1:39fce38f6e13 | 121 | printf("board serialnr = %d\n\r", get_serialnr( &hwl )); |
wbeaumont | 0:263895dd3670 | 122 | wait(2); |
wbeaumont | 0:263895dd3670 | 123 | break; |
wbeaumont | 0:263895dd3670 | 124 | case 'x' : consel=1;break; |
wbeaumont | 0:263895dd3670 | 125 | case 'y' : consel=2;break; |
wbeaumont | 0:263895dd3670 | 126 | case 'z' : dout=NULL; break; |
wbeaumont | 0:263895dd3670 | 127 | |
wbeaumont | 0:263895dd3670 | 128 | default : break; |
wbeaumont | 0:263895dd3670 | 129 | }; |
wbeaumont | 0:263895dd3670 | 130 | c='.';// reset input to default |
wbeaumont | 0:263895dd3670 | 131 | if ( dout != NULL ) { |
wbeaumont | 0:263895dd3670 | 132 | *dout = !(*dout); // toggle pin ; |
wbeaumont | 0:263895dd3670 | 133 | //ledgreen!=ledgreen; |
wbeaumont | 0:263895dd3670 | 134 | } |
wbeaumont | 0:263895dd3670 | 135 | //ledred!=ledred; |
wbeaumont | 0:263895dd3670 | 136 | printf( "miso1:%d msio1:%d miso2:%d msio:%d adc1:%f adc2:%f\n\r", |
wbeaumont | 1:39fce38f6e13 | 137 | hwl.miso[0]->read(),hwl.msio[0]->read(), hwl.miso[1]->read(), |
wbeaumont | 1:39fce38f6e13 | 138 | hwl.msio[1]->read(),hwl.ain[0]->read(),hwl.ain[1]->read() ); |
wbeaumont | 0:263895dd3670 | 139 | |
wbeaumont | 1:39fce38f6e13 | 140 | wait(0.2f); |
wbeaumont | 0:263895dd3670 | 141 | } |
wbeaumont | 0:263895dd3670 | 142 | } |