Testsoftware for SC16IS750

Dependencies:   SC16IS750 mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }