Wim Huiskamp
/
SC16IS750_Test
Testsoftware for SC16IS750
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 #include "SC16IS750.h" 00003 00004 00005 #if defined(TARGET_LPC1768) 00006 // SPI for LPC1768 00007 #define D_MOSI p5 00008 #define D_MISO p6 00009 #define D_SCLK p7 00010 #define D_CS p8 00011 #define D_INTR p15 00012 #define D_RST p16 00013 00014 // Serial for LPC1768 00015 #define D_TX USBTX 00016 #define D_RX USBRX 00017 //#define D_RST p25 00018 //#define D_STS p26 00019 #endif 00020 00021 #if defined(TARGET_KL25Z) 00022 // SPI for KL25Z 00023 #define D_MOSI PTD2 00024 #define D_MISO PTD3 00025 #define D_SCLK PTD1 00026 #define D_CS PTD0 00027 //#define D_INTR PTA13 00028 #define D_RST PTD5 00029 00030 // I2C for KL25Z 00031 #define D_SCL PTE1 00032 #define D_SDA PTE0 00033 00034 // Serial for KL25Z 00035 #define D_TX USBTX 00036 #define D_RX USBRX 00037 #endif 00038 00039 #if defined(TARGET_LPC812) 00040 // SPI for LPC812 00041 #define D_MOSI P0_14 00042 #define D_MISO P0_15 00043 #define D_SCLK P0_12 00044 #define D_CS P0_13 00045 //#define D_INTR P0_7 00046 //#define D_RST P0_8 00047 00048 // Serial for LPC812 00049 #define D_TX P0_4 00050 #define D_RX P0_0 00051 //#define D_RST P0_9 00052 //#define D_STS P0_17 00053 #endif 00054 00055 00056 //SPI Version 00057 SPI spi(D_MOSI, D_MISO, D_SCLK); //MOSI, MISO, SCK 00058 //SC16IS750_SPI serial_bridge(&spi, D_CS); 00059 //SC16IS750_SPI serial_bridge(&spi, D_CS, D_RST); // version with Hardware Reset pin 00060 SC16IS752_SPI serial_bridge(&spi, D_CS, D_RST, SC16IS750::Channel_A); // Dual UART version with Hardware Reset pin 00061 SC16IS752_SPI serial_bridge_B(&spi, D_CS, D_RST, SC16IS750::Channel_B); // Dual UART version with Hardware Reset pin 00062 00063 //I2C Version 00064 //I2C i2c(D_SDA, D_SCL); //SDA, SCL 00065 //SC16IS750_I2C serial_bridge(&i2c, DEFAULT_SC16IS750_ADDR); 00066 //SC16IS750_I2C serial_bridge(&i2c, DEFAULT_SC16IS750_ADDR, D_RST); 00067 00068 DigitalOut myled1(LED_RED); 00069 //DigitalOut myled2(LED_GREEN); 00070 //DigitalOut myled3(LED_BLUE); // Same as PTD1 (SCK) 00071 DigitalOut heartbeatLED(LED_GREEN); 00072 00073 Serial pc(D_TX,D_RX); 00074 00075 void show_menu() { 00076 pc.printf("0: Exit\n\r"); 00077 pc.printf("1: Show Menu\n\r"); 00078 pc.printf("2: Init\n\r"); 00079 pc.printf("3: IO Port Out\n\r"); 00080 pc.printf("4: Transparant mode\n\r"); 00081 pc.printf("5: Free bufferspace\n\r"); 00082 pc.printf("6: Enable RTS/CTS\n\r"); 00083 pc.printf("7: Disable RTS/CTS\n\r"); 00084 pc.printf("8: Write block\n\r"); 00085 pc.printf("9: Baudrate 9600\n\r"); 00086 pc.printf("A: Baudrate 115200\n\r"); 00087 pc.printf("B: Transparant mode with bufferdisplay\n\r"); 00088 pc.printf("C: Test printf \n\r"); 00089 00090 #if(0) 00091 pc.printf("D: \n\r"); 00092 pc.printf("P: \n\r"); 00093 #endif 00094 pc.printf("\n\r"); 00095 } 00096 00097 // Variables for Heartbeat and Status monitoring 00098 Ticker heartbeat; 00099 bool heartbeatflag=false; 00100 00101 // Local functions 00102 void clear_screen() { 00103 //ANSI Terminal Commands 00104 pc.printf("\x1B[2J"); 00105 pc.printf("\x1B[H"); 00106 } 00107 00108 00109 // Heartbeat monitor 00110 void pulse() { 00111 heartbeatLED = !heartbeatLED; 00112 } 00113 00114 void heartbeat_start() { 00115 heartbeat.attach(&pulse, 0.5); 00116 } 00117 00118 void heartbeat_stop() { 00119 heartbeat.detach(); 00120 } 00121 00122 00123 int main() { 00124 bool running=true; 00125 bool running_test=true; 00126 char command, ch; 00127 int i=0; 00128 00129 #if defined(TARGET_LPC1768) 00130 pc.printf("\r\nHello World from LPC1768\r\n"); 00131 #endif 00132 #if defined(TARGET_KL25Z) 00133 pc.printf("\r\nHello World from KL25Z\r\n"); 00134 #endif 00135 #if defined(TARGET_LPC812) 00136 pc.printf("\r\nHello World from LPC812\r\n"); 00137 #endif 00138 00139 00140 heartbeat_start(); 00141 00142 myled1 = 1; // LED Off 00143 00144 // We need to enable flow control or we overflow buffers and 00145 // lose data when used with the WiFly. Note that flow control 00146 // needs to be enabled on the WiFly for this to work but it's 00147 // possible to do that with flow control enabled here but not there. 00148 // serial_bridge.set_flow_control(SC16IS750::RTSCTS); 00149 00150 serial_bridge.ioSetDirection(0xFF); // All outputs 00151 serial_bridge.ioSetState(0x00); // All On 00152 00153 show_menu(); 00154 00155 while(running) { 00156 00157 if(pc.readable()) { 00158 command = pc.getc(); 00159 pc.printf("command= %c \n\r", command); 00160 00161 switch (command) { 00162 case '0' : 00163 pc.printf("Done\n\r"); 00164 running = false; 00165 break; 00166 00167 case '1' : 00168 show_menu(); 00169 break; 00170 00171 case '2' : 00172 pc.printf("Hardware Reset\n\r"); 00173 serial_bridge.hwReset(); //test 00174 00175 pc.printf("Init\n\r"); 00176 serial_bridge._init(); 00177 break; 00178 00179 case '3' : 00180 pc.printf("IO Port Out\n\r"); 00181 00182 i=0; 00183 while (!pc.readable()) { 00184 serial_bridge.ioSetState(~i); 00185 serial_bridge.ioGetState() ; //test 00186 wait(0.5); 00187 pc.putc('*'); 00188 i=(i+1) & 0xFF; 00189 } 00190 00191 pc.getc(); 00192 pc.printf("IO Port Out Done\n\r"); 00193 break; 00194 00195 case '4' : 00196 pc.printf("Transparant Mode, Enter '#' to quit...\n\r"); 00197 00198 running_test=true; 00199 00200 while (running_test) { 00201 // From SPI/I2C to serial 00202 while (running_test && pc.readable()) { 00203 ch = pc.getc(); 00204 running_test = (ch != '#'); 00205 serial_bridge.putc(ch); 00206 } 00207 00208 // From Serial to SPI/I2C 00209 while (running_test && serial_bridge.readable()) { 00210 ch = serial_bridge.getc(); 00211 running_test = (ch != '#'); 00212 pc.putc(ch); 00213 } 00214 00215 } 00216 00217 pc.printf("\n\rTransparant Mode done\n\r"); 00218 break; 00219 00220 case '5' : 00221 pc.printf("Available for Reading = %3d (Free Space = %3d)\n\r", serial_bridge.readableCount(), SC16IS750_FIFO_RX - serial_bridge.readableCount()); 00222 pc.printf("Available for Writing = %3d (Used Space = %3d)\n\r", serial_bridge.writableCount(), SC16IS750_FIFO_TX - serial_bridge.writableCount()); 00223 break; 00224 00225 case '6' : 00226 pc.printf("Enable RTS/CTS\n\r"); 00227 serial_bridge.set_flow_control(SC16IS750::RTSCTS); 00228 break; 00229 case '7' : 00230 pc.printf("Disable RTS/CTS\n\r"); 00231 serial_bridge.set_flow_control(SC16IS750::Disabled); 00232 break; 00233 00234 case '8' : 00235 pc.printf("Write block\n\r"); 00236 serial_bridge.writeString("Hello World from mbed and SC16IS750 "); 00237 break; 00238 00239 case '9' : 00240 pc.printf("Baudrate = 9600, Divisor = %d\n\r", SC16IS750_BAUDRATE_DIVISOR(9600)); 00241 serial_bridge.baud(9600); 00242 break; 00243 00244 case 'A' : 00245 pc.printf("Baudrate = 115200, Divisor = %d\n\r", SC16IS750_BAUDRATE_DIVISOR(115200)); 00246 serial_bridge.baud(115200); 00247 break; 00248 00249 case 'B' : 00250 pc.printf("Transparant Mode with buffer display, Enter '#' to quit...\n\r"); 00251 00252 running_test=true; 00253 00254 while (running_test) { 00255 // From SPI/I2C to serial 00256 while (running_test && pc.readable()) { 00257 ch = pc.getc(); 00258 running_test = (ch != '#'); 00259 serial_bridge.putc(ch); 00260 00261 // Show buffers when character was entered 00262 pc.printf("\n\r"); 00263 pc.printf("Available for Reading = %3d (Free Space = %3d)\n\r", serial_bridge.readableCount(), SC16IS750_FIFO_RX - serial_bridge.readableCount()); 00264 pc.printf("Available for Writing = %3d (Used Space = %3d)\n\r", serial_bridge.writableCount(), SC16IS750_FIFO_TX - serial_bridge.writableCount()); 00265 } 00266 00267 00268 // From Serial to SPI/I2C 00269 while (running_test && serial_bridge.readable()) { 00270 ch = serial_bridge.getc(); 00271 running_test = (ch != '#'); 00272 pc.putc(ch); 00273 } 00274 00275 } 00276 00277 pc.printf("\n\rTransparant Mode done\n\r"); 00278 break; 00279 00280 case 'C' : 00281 pc.printf("Test printf() \n\r"); 00282 00283 serial_bridge.printf("Available for Reading = %3d (Free Space = %3d)\n\r", serial_bridge.readableCount(), SC16IS750_FIFO_RX - serial_bridge.readableCount() ); 00284 serial_bridge.printf("Available for Writing = %3d (Used Space = %3d)\n\r", serial_bridge.writableCount(), SC16IS750_FIFO_TX - serial_bridge.writableCount()); 00285 00286 pc.printf("\n\rTest printf() done\n\r"); 00287 break; 00288 default : 00289 break; 00290 00291 } //switch 00292 } //if 00293 } //while 00294 00295 pc.printf("\nBye World!\n"); 00296 }
Generated on Fri Jul 15 2022 07:20:13 by 1.7.2