This is a simple terminal used for send and receive data via SPI (p5, p6, p7). It use the usb as serial (9600bps) interface port.
main.cpp
00001 #include "mbed.h" 00002 #include <string.h> 00003 #include <stdlib.h> 00004 00005 /* Commands: 00006 Dd - Data out 00007 Cx - CS line state (0/1) 00008 Fd,l - Data flow out, the total size is l 00009 Rl - Receive data, l is the size 00010 Md,d.. - Multiple data write 00011 */ 00012 00013 DigitalOut myled(LED1); 00014 00015 SPI spi_device(p5, p6, p7); 00016 DigitalOut spi_cs(p8); 00017 00018 Serial tty_usb(USBTX, USBRX); 00019 char tty_buffer[0x100]; 00020 00021 void receive_command() { 00022 uint8_t buffer_ptr = 0; 00023 char ch; 00024 00025 tty_usb.putc('>'); 00026 while (1) { 00027 if (tty_usb.readable()) { 00028 ch = tty_usb.getc(); 00029 tty_usb.putc(ch); 00030 00031 tty_buffer[buffer_ptr] = ch; 00032 buffer_ptr++; 00033 if ((ch == '\n') || (ch == '\r')) { 00034 tty_usb.putc('\n'); 00035 tty_usb.putc('\r'); 00036 break; 00037 } 00038 if (ch == 0x7f) { 00039 buffer_ptr -= 2; 00040 tty_usb.putc(0x8); 00041 tty_usb.putc(' '); 00042 tty_usb.putc(0x8); 00043 } 00044 } 00045 } 00046 } 00047 00048 int main() { 00049 uint8_t arg_data, arg_data_in; 00050 uint16_t arg_size; 00051 char *arg_ptr; 00052 00053 tty_usb.baud(9600); 00054 00055 while(1) { 00056 00057 receive_command(); 00058 switch (tty_buffer[0]) { 00059 case 'D': 00060 case 'd': 00061 arg_data = strtol(&tty_buffer[1], NULL, 16); 00062 arg_data_in = spi_device.write(arg_data); 00063 tty_usb.printf("#\tSingle data: OUT: $%02X - IN: $%02X\n\r", arg_data, arg_data_in); 00064 break; 00065 case 'C': 00066 case 'c': 00067 spi_cs = (tty_buffer[1] == '0') ? 0 : 1; 00068 break; 00069 case 'R': 00070 case 'r': 00071 arg_size = strtol(&tty_buffer[1], NULL, 16); 00072 for (int i = 0; i < arg_size; i++) 00073 tty_usb.printf("#\tReceived data [$%04X]: $%02X\n\r", i, spi_device.write(0x00)); 00074 break; 00075 00076 case 'F': 00077 case 'f': 00078 arg_size = strtol(strchr(tty_buffer, ',')+1, NULL, 16); 00079 *(strchr(tty_buffer, ',') + 1) = 0x00; 00080 arg_data = strtol(&tty_buffer[1], NULL, 16); 00081 00082 for (int i = 0; i < arg_size; i++) { 00083 arg_data_in = spi_device.write(arg_data); 00084 tty_usb.printf("#\tFlow data [$%04X]: OUT: $%02X - IN: $%02X\n\r", i, arg_data, arg_data_in); 00085 00086 } 00087 break; 00088 00089 case 'M': 00090 case 'm': 00091 arg_ptr = strtok(&tty_buffer[1], ",\n\r"); 00092 arg_size = 0; 00093 while (arg_ptr != NULL) { 00094 arg_data = strtol(arg_ptr, NULL, 16); 00095 arg_data_in = spi_device.write(arg_data); 00096 tty_usb.printf("#\tMultiple data [$%04X]: OUT: $%02X - IN: $%02X\n\r", arg_size, arg_data, arg_data_in); 00097 arg_ptr = strtok(NULL, ",\n\r"); 00098 arg_size++; 00099 } 00100 break; 00101 00102 } 00103 } 00104 }
Generated on Fri Jul 15 2022 03:07:57 by 1.7.2