Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@16:fbe18dbc2fb7, 2013-07-16 (annotated)
- Committer:
- yuhangzhu
- Date:
- Tue Jul 16 20:47:21 2013 +0000
- Revision:
- 16:fbe18dbc2fb7
- Parent:
- 15:3f3560332bc1
- Child:
- 17:54a003ac9610
the loopback is working good and next step is spi now...
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| yuhangzhu | 12:5e4cba1182ab | 1 | //This main funtion mainly implements a mode transfer. |
| yuhangzhu | 12:5e4cba1182ab | 2 | //When mcu resets, it's in MODE_IDLE. Then depends on the keyboard input, the |
| yuhangzhu | 12:5e4cba1182ab | 3 | //mode switches to transition modes such as |
| yuhangzhu | 12:5e4cba1182ab | 4 | //MODE_CHAxPHA, which is for phase input of channel x, or |
| yuhangzhu | 12:5e4cba1182ab | 5 | //MODE_CHAxAMP, which is for attenuation input of channel x, or |
| yuhangzhu | 12:5e4cba1182ab | 6 | //MODE_DISPLAY, which is for displaying the current parameters, or |
| yuhangzhu | 12:5e4cba1182ab | 7 | //MODE_HELP, which is for displaying the help infomation, or |
| yuhangzhu | 12:5e4cba1182ab | 8 | //MODE_SEND, which is for sending the bit stream through the SPI bus. |
| yuhangzhu | 12:5e4cba1182ab | 9 | //After each transition mode completes, mcu returns to MODE_IDLE to wait for another user input. |
| yuhangzhu | 12:5e4cba1182ab | 10 | |
| yuhangzhu | 12:5e4cba1182ab | 11 | |
| yuhangzhu | 0:249f6f78cd05 | 12 | #include "mbed.h" |
| yuhangzhu | 0:249f6f78cd05 | 13 | #include "menu.h" |
| yuhangzhu | 0:249f6f78cd05 | 14 | #include "parameters.h" |
| yuhangzhu | 3:32e67d121c7f | 15 | #include "handlers.h" |
| yuhangzhu | 8:f0c3d5911b87 | 16 | //#define DEBUG |
| yuhangzhu | 0:249f6f78cd05 | 17 | |
| yuhangzhu | 0:249f6f78cd05 | 18 | Serial pc(USBTX, USBRX); |
| yuhangzhu | 15:3f3560332bc1 | 19 | SPI spi(PTD2, PTD3, PTD1); // mosi, miso, sclk |
| yuhangzhu | 15:3f3560332bc1 | 20 | DigitalOut cs(PTD0); |
| yuhangzhu | 2:45db4f4ca70d | 21 | |
| yuhangzhu | 3:32e67d121c7f | 22 | char recv; |
| yuhangzhu | 11:0e42dd431fb5 | 23 | char temp; |
| yuhangzhu | 11:0e42dd431fb5 | 24 | |
| yuhangzhu | 2:45db4f4ca70d | 25 | int state; |
| yuhangzhu | 6:e510aab8f2ce | 26 | char cha1_pha, cha2_pha; |
| yuhangzhu | 6:e510aab8f2ce | 27 | char cha1_amp, cha2_amp; |
| yuhangzhu | 6:e510aab8f2ce | 28 | int ret; |
| yuhangzhu | 6:e510aab8f2ce | 29 | |
| yuhangzhu | 11:0e42dd431fb5 | 30 | unsigned short spi_stream; |
| yuhangzhu | 15:3f3560332bc1 | 31 | unsigned char spi_first_byte_s; |
| yuhangzhu | 15:3f3560332bc1 | 32 | unsigned char spi_second_byte_s; // The first and second byte to send |
| yuhangzhu | 15:3f3560332bc1 | 33 | |
| yuhangzhu | 15:3f3560332bc1 | 34 | unsigned char spi_first_byte_r; // The first and second byte to receive |
| yuhangzhu | 15:3f3560332bc1 | 35 | unsigned char spi_second_byte_r; |
| yuhangzhu | 10:ff8c2470f019 | 36 | |
| yuhangzhu | 12:5e4cba1182ab | 37 | char line_buf[4]; //line_buf[3] is used to indicate if it's empty 0 empty 1 not, other bytes for char data |
| yuhangzhu | 4:e8142db2bbfd | 38 | int line_pt; //line buffer pointer points to next buffer location it's going to write |
| yuhangzhu | 4:e8142db2bbfd | 39 | int line_length; //store the current line length |
| yuhangzhu | 10:ff8c2470f019 | 40 | int i; |
| yuhangzhu | 2:45db4f4ca70d | 41 | |
| yuhangzhu | 0:249f6f78cd05 | 42 | int main() { |
| yuhangzhu | 0:249f6f78cd05 | 43 | |
| yuhangzhu | 12:5e4cba1182ab | 44 | pc.baud(19200); //config buad rate. Note: 115200 seems too high for the current board |
| yuhangzhu | 15:3f3560332bc1 | 45 | cs = 1; //spi config |
| yuhangzhu | 15:3f3560332bc1 | 46 | spi.format(8,0); // 16 bit frame is not working, so need to send twice 8 bit frame |
| yuhangzhu | 15:3f3560332bc1 | 47 | spi.frequency(1000000); |
| yuhangzhu | 15:3f3560332bc1 | 48 | |
| yuhangzhu | 1:cb6811ef87de | 49 | state = MODE_IDLE; |
| yuhangzhu | 3:32e67d121c7f | 50 | line_buf[3] = 0; |
| yuhangzhu | 3:32e67d121c7f | 51 | line_buf[2] = 255; |
| yuhangzhu | 3:32e67d121c7f | 52 | line_buf[1] = 255; |
| yuhangzhu | 3:32e67d121c7f | 53 | line_buf[0] = 255; |
| yuhangzhu | 10:ff8c2470f019 | 54 | cha1_pha = 0; |
| yuhangzhu | 10:ff8c2470f019 | 55 | cha2_pha = 0; |
| yuhangzhu | 10:ff8c2470f019 | 56 | cha1_amp = 0; |
| yuhangzhu | 10:ff8c2470f019 | 57 | cha2_amp = 0; |
| yuhangzhu | 0:249f6f78cd05 | 58 | |
| yuhangzhu | 0:249f6f78cd05 | 59 | while(1) |
| yuhangzhu | 0:249f6f78cd05 | 60 | { |
| yuhangzhu | 1:cb6811ef87de | 61 | switch(state) |
| yuhangzhu | 0:249f6f78cd05 | 62 | { |
| yuhangzhu | 1:cb6811ef87de | 63 | case MODE_IDLE: |
| yuhangzhu | 1:cb6811ef87de | 64 | pc.printf("%s", main_menu); |
| yuhangzhu | 3:32e67d121c7f | 65 | recv = pc.getc(); |
| yuhangzhu | 14:fb67a8b1d1a5 | 66 | mode_idle_handler(&state, recv); //change state based on recv input |
| yuhangzhu | 3:32e67d121c7f | 67 | //pc.printf("%d", state); |
| yuhangzhu | 3:32e67d121c7f | 68 | break; |
| yuhangzhu | 11:0e42dd431fb5 | 69 | |
| yuhangzhu | 3:32e67d121c7f | 70 | case MODE_CHA1PHA: |
| yuhangzhu | 5:50ea1502a949 | 71 | case MODE_CHA1AMP: |
| yuhangzhu | 5:50ea1502a949 | 72 | case MODE_CHA2PHA: |
| yuhangzhu | 5:50ea1502a949 | 73 | case MODE_CHA2AMP: |
| yuhangzhu | 5:50ea1502a949 | 74 | if(state == MODE_CHA1PHA) |
| yuhangzhu | 5:50ea1502a949 | 75 | pc.printf("%s", cmd1); |
| yuhangzhu | 5:50ea1502a949 | 76 | else if(state == MODE_CHA1AMP) |
| yuhangzhu | 5:50ea1502a949 | 77 | pc.printf("%s", cmd2); |
| yuhangzhu | 5:50ea1502a949 | 78 | else if(state == MODE_CHA2PHA) |
| yuhangzhu | 5:50ea1502a949 | 79 | pc.printf("%s", cmd3); |
| yuhangzhu | 5:50ea1502a949 | 80 | else |
| yuhangzhu | 5:50ea1502a949 | 81 | pc.printf("%s", cmd4); |
| yuhangzhu | 5:50ea1502a949 | 82 | |
| yuhangzhu | 3:32e67d121c7f | 83 | line_buf[3] = 0; |
| yuhangzhu | 5:50ea1502a949 | 84 | line_buf[2] = 255; |
| yuhangzhu | 5:50ea1502a949 | 85 | line_buf[1] = 255; |
| yuhangzhu | 5:50ea1502a949 | 86 | line_buf[0] = 255; |
| yuhangzhu | 3:32e67d121c7f | 87 | line_pt = 0; |
| yuhangzhu | 4:e8142db2bbfd | 88 | line_length = 0; |
| yuhangzhu | 3:32e67d121c7f | 89 | |
| yuhangzhu | 12:5e4cba1182ab | 90 | while(1) //Character input into line buffer, terminated by enter key |
| yuhangzhu | 3:32e67d121c7f | 91 | { |
| yuhangzhu | 3:32e67d121c7f | 92 | recv = pc.getc(); |
| yuhangzhu | 6:e510aab8f2ce | 93 | if(recv == 13) //enter is pressed, break |
| yuhangzhu | 3:32e67d121c7f | 94 | { |
| yuhangzhu | 4:e8142db2bbfd | 95 | if(line_length == 0) |
| yuhangzhu | 6:e510aab8f2ce | 96 | line_buf[3] = LINEBUF_EMPTY; |
| yuhangzhu | 6:e510aab8f2ce | 97 | else if(line_length > 3) |
| yuhangzhu | 6:e510aab8f2ce | 98 | line_buf[3] = LINEBUF_TOOLONG; |
| yuhangzhu | 3:32e67d121c7f | 99 | else |
| yuhangzhu | 6:e510aab8f2ce | 100 | line_buf[3] = LINEBUF_OK; |
| yuhangzhu | 8:f0c3d5911b87 | 101 | #ifdef DEBUG |
| yuhangzhu | 8:f0c3d5911b87 | 102 | pc.printf("decimal output : %d %d %d %d", line_buf[3], line_buf[2], line_buf[1], line_buf[0]); |
| yuhangzhu | 8:f0c3d5911b87 | 103 | pc.printf("char output: %c %c %c %c", line_buf[3], line_buf[2], line_buf[1], line_buf[0]); |
| yuhangzhu | 8:f0c3d5911b87 | 104 | #endif |
| yuhangzhu | 8:f0c3d5911b87 | 105 | |
| yuhangzhu | 4:e8142db2bbfd | 106 | break; |
| yuhangzhu | 3:32e67d121c7f | 107 | } |
| yuhangzhu | 6:e510aab8f2ce | 108 | else if(recv == 8) //backspace is pressed, delete one character both on screen and line buffer |
| yuhangzhu | 3:32e67d121c7f | 109 | { |
| yuhangzhu | 3:32e67d121c7f | 110 | pc.putc(8); |
| yuhangzhu | 3:32e67d121c7f | 111 | pc.putc(32); |
| yuhangzhu | 3:32e67d121c7f | 112 | pc.putc(8); |
| yuhangzhu | 4:e8142db2bbfd | 113 | |
| yuhangzhu | 4:e8142db2bbfd | 114 | if(line_length <= 3 && line_length>=1) |
| yuhangzhu | 3:32e67d121c7f | 115 | { |
| yuhangzhu | 4:e8142db2bbfd | 116 | line_pt --; |
| yuhangzhu | 3:32e67d121c7f | 117 | line_buf[line_pt] = 255; |
| yuhangzhu | 3:32e67d121c7f | 118 | } |
| yuhangzhu | 4:e8142db2bbfd | 119 | if(line_length > 0) |
| yuhangzhu | 4:e8142db2bbfd | 120 | line_length --; |
| yuhangzhu | 3:32e67d121c7f | 121 | } |
| yuhangzhu | 6:e510aab8f2ce | 122 | else //other character is pressed, record that in line buffer |
| yuhangzhu | 3:32e67d121c7f | 123 | { |
| yuhangzhu | 3:32e67d121c7f | 124 | pc.putc(recv); |
| yuhangzhu | 4:e8142db2bbfd | 125 | line_length ++; |
| yuhangzhu | 4:e8142db2bbfd | 126 | |
| yuhangzhu | 4:e8142db2bbfd | 127 | if(line_length <= 3) |
| yuhangzhu | 4:e8142db2bbfd | 128 | { |
| yuhangzhu | 4:e8142db2bbfd | 129 | line_buf[line_pt] = recv; |
| yuhangzhu | 3:32e67d121c7f | 130 | line_pt ++; |
| yuhangzhu | 4:e8142db2bbfd | 131 | } |
| yuhangzhu | 3:32e67d121c7f | 132 | } |
| yuhangzhu | 3:32e67d121c7f | 133 | } |
| yuhangzhu | 6:e510aab8f2ce | 134 | //input over, now checking |
| yuhangzhu | 12:5e4cba1182ab | 135 | //check phase shift input |
| yuhangzhu | 6:e510aab8f2ce | 136 | if(state == MODE_CHA1PHA || state == MODE_CHA2PHA) |
| yuhangzhu | 6:e510aab8f2ce | 137 | { |
| yuhangzhu | 6:e510aab8f2ce | 138 | if(state == MODE_CHA1PHA) |
| yuhangzhu | 6:e510aab8f2ce | 139 | ret = parse_phase(line_buf, &cha1_pha); |
| yuhangzhu | 6:e510aab8f2ce | 140 | else |
| yuhangzhu | 6:e510aab8f2ce | 141 | ret = parse_phase(line_buf, &cha2_pha); |
| yuhangzhu | 6:e510aab8f2ce | 142 | |
| yuhangzhu | 7:c268547fb6c8 | 143 | if(ret == PARSE_LONG) //Input string too long |
| yuhangzhu | 6:e510aab8f2ce | 144 | { |
| yuhangzhu | 6:e510aab8f2ce | 145 | pc.printf("%s", msg_strlong); |
| yuhangzhu | 6:e510aab8f2ce | 146 | pc.getc(); |
| yuhangzhu | 6:e510aab8f2ce | 147 | } |
| yuhangzhu | 7:c268547fb6c8 | 148 | else if(ret == PARSE_EMPTY) |
| yuhangzhu | 7:c268547fb6c8 | 149 | { |
| yuhangzhu | 7:c268547fb6c8 | 150 | pc.printf("%s", msg_empty); |
| yuhangzhu | 7:c268547fb6c8 | 151 | pc.printf("%s", msg_ret); |
| yuhangzhu | 7:c268547fb6c8 | 152 | pc.getc(); |
| yuhangzhu | 7:c268547fb6c8 | 153 | } |
| yuhangzhu | 7:c268547fb6c8 | 154 | else if(ret == PARSE_ERR) //Input string has error |
| yuhangzhu | 6:e510aab8f2ce | 155 | { |
| yuhangzhu | 6:e510aab8f2ce | 156 | pc.printf("%s", msg_err); |
| yuhangzhu | 6:e510aab8f2ce | 157 | pc.getc(); |
| yuhangzhu | 6:e510aab8f2ce | 158 | } |
| yuhangzhu | 7:c268547fb6c8 | 159 | else if(ret == PARSE_ROUNDED) //Input is rounded,show the rounded value |
| yuhangzhu | 6:e510aab8f2ce | 160 | { |
| yuhangzhu | 6:e510aab8f2ce | 161 | if(state == MODE_CHA1PHA) |
| yuhangzhu | 9:3eaacc1ad758 | 162 | pc.printf("%s %d\n", msg_rounded, cha1_pha*-7); |
| yuhangzhu | 6:e510aab8f2ce | 163 | else if(state == MODE_CHA2PHA) |
| yuhangzhu | 9:3eaacc1ad758 | 164 | pc.printf("%s %d\n", msg_rounded, cha2_pha*-7); |
| yuhangzhu | 6:e510aab8f2ce | 165 | |
| yuhangzhu | 6:e510aab8f2ce | 166 | pc.printf("%s", msg_ret); |
| yuhangzhu | 6:e510aab8f2ce | 167 | pc.getc(); |
| yuhangzhu | 6:e510aab8f2ce | 168 | } |
| yuhangzhu | 7:c268547fb6c8 | 169 | else //Input is good |
| yuhangzhu | 6:e510aab8f2ce | 170 | { |
| yuhangzhu | 6:e510aab8f2ce | 171 | pc.printf("%s", msg_ok); |
| yuhangzhu | 8:f0c3d5911b87 | 172 | #ifdef DEBUG |
| yuhangzhu | 6:e510aab8f2ce | 173 | pc.printf("%d %d\n", cha1_pha*7, cha2_pha*7); |
| yuhangzhu | 8:f0c3d5911b87 | 174 | #endif |
| yuhangzhu | 6:e510aab8f2ce | 175 | pc.printf("%s", msg_ret); |
| yuhangzhu | 6:e510aab8f2ce | 176 | pc.getc(); |
| yuhangzhu | 6:e510aab8f2ce | 177 | } |
| yuhangzhu | 6:e510aab8f2ce | 178 | } |
| yuhangzhu | 3:32e67d121c7f | 179 | |
| yuhangzhu | 7:c268547fb6c8 | 180 | //check attenuation input |
| yuhangzhu | 7:c268547fb6c8 | 181 | if(state == MODE_CHA1AMP || state == MODE_CHA2AMP) |
| yuhangzhu | 7:c268547fb6c8 | 182 | { |
| yuhangzhu | 7:c268547fb6c8 | 183 | if(state == MODE_CHA1AMP) |
| yuhangzhu | 7:c268547fb6c8 | 184 | ret = parse_amp(line_buf, &cha1_amp); |
| yuhangzhu | 7:c268547fb6c8 | 185 | else |
| yuhangzhu | 7:c268547fb6c8 | 186 | ret = parse_amp(line_buf, &cha2_amp); |
| yuhangzhu | 7:c268547fb6c8 | 187 | |
| yuhangzhu | 7:c268547fb6c8 | 188 | if(ret == PARSE_LONG) //Input string too long |
| yuhangzhu | 7:c268547fb6c8 | 189 | { |
| yuhangzhu | 7:c268547fb6c8 | 190 | pc.printf("%s", msg_strlong); |
| yuhangzhu | 7:c268547fb6c8 | 191 | pc.getc(); |
| yuhangzhu | 7:c268547fb6c8 | 192 | } |
| yuhangzhu | 7:c268547fb6c8 | 193 | else if(ret == PARSE_EMPTY) |
| yuhangzhu | 7:c268547fb6c8 | 194 | { |
| yuhangzhu | 7:c268547fb6c8 | 195 | pc.printf("%s", msg_empty); |
| yuhangzhu | 7:c268547fb6c8 | 196 | pc.printf("%s", msg_ret); |
| yuhangzhu | 7:c268547fb6c8 | 197 | pc.getc(); |
| yuhangzhu | 7:c268547fb6c8 | 198 | } |
| yuhangzhu | 7:c268547fb6c8 | 199 | else if(ret == PARSE_ERR) //Input string has error |
| yuhangzhu | 7:c268547fb6c8 | 200 | { |
| yuhangzhu | 7:c268547fb6c8 | 201 | pc.printf("%s", msg_err); |
| yuhangzhu | 7:c268547fb6c8 | 202 | pc.getc(); |
| yuhangzhu | 7:c268547fb6c8 | 203 | } |
| yuhangzhu | 7:c268547fb6c8 | 204 | else if(ret == PARSE_ROUNDED) //Input is rounded, show the rounded value |
| yuhangzhu | 7:c268547fb6c8 | 205 | { |
| yuhangzhu | 7:c268547fb6c8 | 206 | if(state == MODE_CHA1AMP) |
| yuhangzhu | 8:f0c3d5911b87 | 207 | pc.printf("%s %.1f\n", msg_rounded, cha1_amp*5.0/10.0); |
| yuhangzhu | 7:c268547fb6c8 | 208 | else if(state == MODE_CHA2AMP) |
| yuhangzhu | 8:f0c3d5911b87 | 209 | pc.printf("%s %.1f\n", msg_rounded, cha2_amp*5.0/10.0); |
| yuhangzhu | 7:c268547fb6c8 | 210 | |
| yuhangzhu | 7:c268547fb6c8 | 211 | pc.printf("%s", msg_ret); |
| yuhangzhu | 7:c268547fb6c8 | 212 | pc.getc(); |
| yuhangzhu | 7:c268547fb6c8 | 213 | } |
| yuhangzhu | 7:c268547fb6c8 | 214 | else //Input is good |
| yuhangzhu | 7:c268547fb6c8 | 215 | { |
| yuhangzhu | 7:c268547fb6c8 | 216 | pc.printf("%s", msg_ok); |
| yuhangzhu | 8:f0c3d5911b87 | 217 | #ifdef DEBUG |
| yuhangzhu | 7:c268547fb6c8 | 218 | pc.printf("%d %d\n", cha1_amp*5, cha2_amp*5); |
| yuhangzhu | 8:f0c3d5911b87 | 219 | #endif |
| yuhangzhu | 7:c268547fb6c8 | 220 | pc.printf("%s", msg_ret); |
| yuhangzhu | 7:c268547fb6c8 | 221 | pc.getc(); |
| yuhangzhu | 7:c268547fb6c8 | 222 | } |
| yuhangzhu | 7:c268547fb6c8 | 223 | } |
| yuhangzhu | 7:c268547fb6c8 | 224 | state = MODE_IDLE; //back to idle state after input |
| yuhangzhu | 3:32e67d121c7f | 225 | break; |
| yuhangzhu | 5:50ea1502a949 | 226 | |
| yuhangzhu | 12:5e4cba1182ab | 227 | // In display mode, show current parameters |
| yuhangzhu | 8:f0c3d5911b87 | 228 | case MODE_DISPLAY: |
| yuhangzhu | 11:0e42dd431fb5 | 229 | |
| yuhangzhu | 14:fb67a8b1d1a5 | 230 | pc.printf("Phase shift for RF out1 is %d degrees\n", cha1_pha*-7); |
| yuhangzhu | 14:fb67a8b1d1a5 | 231 | pc.printf("Attentuation for RF out1 is %.1f dB\n", cha1_amp*5.0/10.0); |
| yuhangzhu | 14:fb67a8b1d1a5 | 232 | pc.printf("Phase shift for RF out2 is %d degrees\n", cha2_pha*-7); |
| yuhangzhu | 14:fb67a8b1d1a5 | 233 | pc.printf("Attentuation for RF out2 is %.1f dB\n", cha2_amp*5.0/10.0); |
| yuhangzhu | 8:f0c3d5911b87 | 234 | pc.printf("%s", msg_ret); |
| yuhangzhu | 8:f0c3d5911b87 | 235 | pc.getc(); |
| yuhangzhu | 8:f0c3d5911b87 | 236 | state = MODE_IDLE; |
| yuhangzhu | 8:f0c3d5911b87 | 237 | break; |
| yuhangzhu | 12:5e4cba1182ab | 238 | //Help mode, displays help info |
| yuhangzhu | 9:3eaacc1ad758 | 239 | case MODE_HELP: |
| yuhangzhu | 11:0e42dd431fb5 | 240 | |
| yuhangzhu | 9:3eaacc1ad758 | 241 | pc.printf("%s", msg_help); |
| yuhangzhu | 9:3eaacc1ad758 | 242 | pc.printf("%s", msg_ret); |
| yuhangzhu | 9:3eaacc1ad758 | 243 | pc.getc(); |
| yuhangzhu | 9:3eaacc1ad758 | 244 | state = MODE_IDLE; |
| yuhangzhu | 9:3eaacc1ad758 | 245 | break; |
| yuhangzhu | 9:3eaacc1ad758 | 246 | |
| yuhangzhu | 12:5e4cba1182ab | 247 | case MODE_SEND: //In sending mode, display and send through SPI |
| yuhangzhu | 15:3f3560332bc1 | 248 | |
| yuhangzhu | 15:3f3560332bc1 | 249 | //Calculate the send info |
| yuhangzhu | 15:3f3560332bc1 | 250 | spi_stream = (cha2_amp << 12) | (cha2_pha << 8) | (cha1_amp << 4) | (cha1_pha); |
| yuhangzhu | 15:3f3560332bc1 | 251 | spi_first_byte_s = (cha2_amp << 4) | (cha2_pha); |
| yuhangzhu | 15:3f3560332bc1 | 252 | spi_second_byte_s = (cha1_amp << 4) | (cha1_pha); |
| yuhangzhu | 11:0e42dd431fb5 | 253 | |
| yuhangzhu | 15:3f3560332bc1 | 254 | cs = 0; // start sending, send and recond the response(send and loopback in this case) |
| yuhangzhu | 15:3f3560332bc1 | 255 | spi_first_byte_r = spi.write(spi_first_byte_s); |
| yuhangzhu | 15:3f3560332bc1 | 256 | spi_second_byte_r = spi.write(spi_second_byte_s); |
| yuhangzhu | 15:3f3560332bc1 | 257 | cs = 1; |
| yuhangzhu | 15:3f3560332bc1 | 258 | |
| yuhangzhu | 15:3f3560332bc1 | 259 | //Start printint... |
| yuhangzhu | 14:fb67a8b1d1a5 | 260 | pc.printf("Phase shift for RF out1 is %d degrees\n", cha1_pha*-7); |
| yuhangzhu | 14:fb67a8b1d1a5 | 261 | pc.printf("Attentuation for RF out1 is %.1f dB\n", cha1_amp*5.0/10.0); |
| yuhangzhu | 14:fb67a8b1d1a5 | 262 | pc.printf("Phase shift for RF out2 is %d degrees\n", cha2_pha*-7); |
| yuhangzhu | 14:fb67a8b1d1a5 | 263 | pc.printf("Attentuation for RF out2 is %.1f dB\n", cha2_amp*5.0/10.0); |
| yuhangzhu | 15:3f3560332bc1 | 264 | pc.printf("\nSPI bit stream sent:\n"); |
| yuhangzhu | 15:3f3560332bc1 | 265 | pc.printf("%s", bit_index); |
| yuhangzhu | 14:fb67a8b1d1a5 | 266 | |
| yuhangzhu | 15:3f3560332bc1 | 267 | //Output the SPI bit stream sent for user reference |
| yuhangzhu | 10:ff8c2470f019 | 268 | for(i=0; i<=15; i++) |
| yuhangzhu | 10:ff8c2470f019 | 269 | { |
| yuhangzhu | 14:fb67a8b1d1a5 | 270 | |
| yuhangzhu | 11:0e42dd431fb5 | 271 | if(spi_stream >= 0x8000) |
| yuhangzhu | 14:fb67a8b1d1a5 | 272 | pc.printf("%d ", 1); |
| yuhangzhu | 10:ff8c2470f019 | 273 | else |
| yuhangzhu | 14:fb67a8b1d1a5 | 274 | pc.printf("%d ", 0); |
| yuhangzhu | 14:fb67a8b1d1a5 | 275 | |
| yuhangzhu | 14:fb67a8b1d1a5 | 276 | if(i == 7) |
| yuhangzhu | 14:fb67a8b1d1a5 | 277 | pc.printf(" "); |
| yuhangzhu | 14:fb67a8b1d1a5 | 278 | |
| yuhangzhu | 11:0e42dd431fb5 | 279 | spi_stream = spi_stream << 1; |
| yuhangzhu | 10:ff8c2470f019 | 280 | } |
| yuhangzhu | 16:fbe18dbc2fb7 | 281 | pc.printf("\n\nParameters sent OK\n\n\n\n"); |
| yuhangzhu | 11:0e42dd431fb5 | 282 | |
| yuhangzhu | 15:3f3560332bc1 | 283 | |
| yuhangzhu | 16:fbe18dbc2fb7 | 284 | //output the previous parameters: |
| yuhangzhu | 16:fbe18dbc2fb7 | 285 | pc.printf("Now displaying the previous parameters\n"); |
| yuhangzhu | 16:fbe18dbc2fb7 | 286 | pc.printf("\nPrevious phase shift for RF out1 is %d degrees\n", (spi_second_byte_r&0x07)*-7); |
| yuhangzhu | 16:fbe18dbc2fb7 | 287 | pc.printf("Previous attentuation for RF out1 is %.1f dB\n", (spi_second_byte_r>>4)*5.0/10.0); |
| yuhangzhu | 16:fbe18dbc2fb7 | 288 | pc.printf("Previous phase shift for RF out2 is %d degrees\n", (spi_first_byte_r&0x07)*-7); |
| yuhangzhu | 16:fbe18dbc2fb7 | 289 | pc.printf("Previous attentuation for RF out2 is %.1f dB\n", (spi_first_byte_r>>4)*5.0/10.0); |
| yuhangzhu | 16:fbe18dbc2fb7 | 290 | //spi bit stream for previous parameters |
| yuhangzhu | 15:3f3560332bc1 | 291 | pc.printf("\nSPI bit stream received:\n"); |
| yuhangzhu | 15:3f3560332bc1 | 292 | pc.printf("%s", bit_index); |
| yuhangzhu | 15:3f3560332bc1 | 293 | for(i=0; i<=7; i++) |
| yuhangzhu | 15:3f3560332bc1 | 294 | { |
| yuhangzhu | 15:3f3560332bc1 | 295 | if(spi_first_byte_r >= 0x80) |
| yuhangzhu | 15:3f3560332bc1 | 296 | pc.printf("%d ", 1); |
| yuhangzhu | 15:3f3560332bc1 | 297 | else |
| yuhangzhu | 15:3f3560332bc1 | 298 | pc.printf("%d ", 0); |
| yuhangzhu | 15:3f3560332bc1 | 299 | |
| yuhangzhu | 15:3f3560332bc1 | 300 | spi_first_byte_r = spi_first_byte_r << 1; |
| yuhangzhu | 15:3f3560332bc1 | 301 | } |
| yuhangzhu | 15:3f3560332bc1 | 302 | pc.printf(" "); |
| yuhangzhu | 15:3f3560332bc1 | 303 | for(i=0; i<=7; i++) |
| yuhangzhu | 15:3f3560332bc1 | 304 | { |
| yuhangzhu | 15:3f3560332bc1 | 305 | if(spi_second_byte_r >= 0x80) |
| yuhangzhu | 15:3f3560332bc1 | 306 | pc.printf("%d ", 1); |
| yuhangzhu | 15:3f3560332bc1 | 307 | else |
| yuhangzhu | 15:3f3560332bc1 | 308 | pc.printf("%d ", 0); |
| yuhangzhu | 15:3f3560332bc1 | 309 | |
| yuhangzhu | 15:3f3560332bc1 | 310 | spi_second_byte_r = spi_second_byte_r << 1; |
| yuhangzhu | 15:3f3560332bc1 | 311 | } |
| yuhangzhu | 16:fbe18dbc2fb7 | 312 | |
| yuhangzhu | 15:3f3560332bc1 | 313 | pc.printf("\n\n\n"); |
| yuhangzhu | 15:3f3560332bc1 | 314 | |
| yuhangzhu | 10:ff8c2470f019 | 315 | pc.printf("%s", msg_ret); |
| yuhangzhu | 10:ff8c2470f019 | 316 | pc.getc(); |
| yuhangzhu | 10:ff8c2470f019 | 317 | state = MODE_IDLE; |
| yuhangzhu | 10:ff8c2470f019 | 318 | break; |
| yuhangzhu | 9:3eaacc1ad758 | 319 | default: |
| yuhangzhu | 9:3eaacc1ad758 | 320 | state = MODE_IDLE; |
| yuhangzhu | 1:cb6811ef87de | 321 | } |
| yuhangzhu | 0:249f6f78cd05 | 322 | |
| yuhangzhu | 0:249f6f78cd05 | 323 | |
| yuhangzhu | 0:249f6f78cd05 | 324 | } |
| yuhangzhu | 0:249f6f78cd05 | 325 | |
| yuhangzhu | 0:249f6f78cd05 | 326 | |
| yuhangzhu | 0:249f6f78cd05 | 327 | return 0; |
| yuhangzhu | 0:249f6f78cd05 | 328 | } |