Testsoftware for SC16IS750

Dependencies:   SC16IS750 USBDevice mbed

Fork of SC16IS750_Test by Wim Huiskamp

Committer:
whatnick
Date:
Wed Dec 24 08:30:30 2014 +0000
Revision:
6:b3a16b127073
Parent:
5:c75ddfd44ae3
Xadow adapatations for SC16IS750

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 0:d83a90125711 1 #include "mbed.h"
wim 0:d83a90125711 2 #include "SC16IS750.h"
wim 0:d83a90125711 3
wim 2:8aba07490dce 4
wim 2:8aba07490dce 5 #if defined(TARGET_LPC1768)
wim 2:8aba07490dce 6 // SPI for LPC1768
wim 2:8aba07490dce 7 #define D_MOSI p5
wim 2:8aba07490dce 8 #define D_MISO p6
wim 2:8aba07490dce 9 #define D_SCLK p7
wim 2:8aba07490dce 10 #define D_CS p8
wim 2:8aba07490dce 11 #define D_INTR p15
wim 5:c75ddfd44ae3 12 #define D_RST p16
wim 2:8aba07490dce 13
wim 2:8aba07490dce 14 // Serial for LPC1768
wim 2:8aba07490dce 15 #define D_TX USBTX
wim 2:8aba07490dce 16 #define D_RX USBRX
wim 2:8aba07490dce 17 //#define D_RST p25
wim 2:8aba07490dce 18 //#define D_STS p26
wim 2:8aba07490dce 19 #endif
wim 2:8aba07490dce 20
wim 2:8aba07490dce 21 #if defined(TARGET_KL25Z)
wim 2:8aba07490dce 22 // SPI for KL25Z
wim 2:8aba07490dce 23 #define D_MOSI PTD2
wim 2:8aba07490dce 24 #define D_MISO PTD3
wim 2:8aba07490dce 25 #define D_SCLK PTD1
wim 2:8aba07490dce 26 #define D_CS PTD0
wim 5:c75ddfd44ae3 27 //#define D_INTR PTA13
wim 5:c75ddfd44ae3 28 #define D_RST PTD5
wim 2:8aba07490dce 29
wim 2:8aba07490dce 30 // I2C for KL25Z
wim 2:8aba07490dce 31 #define D_SCL PTE1
wim 2:8aba07490dce 32 #define D_SDA PTE0
wim 2:8aba07490dce 33
wim 2:8aba07490dce 34 // Serial for KL25Z
wim 2:8aba07490dce 35 #define D_TX USBTX
wim 2:8aba07490dce 36 #define D_RX USBRX
wim 2:8aba07490dce 37 #endif
wim 2:8aba07490dce 38
wim 2:8aba07490dce 39 #if defined(TARGET_LPC812)
wim 2:8aba07490dce 40 // SPI for LPC812
wim 2:8aba07490dce 41 #define D_MOSI P0_14
wim 2:8aba07490dce 42 #define D_MISO P0_15
wim 2:8aba07490dce 43 #define D_SCLK P0_12
wim 2:8aba07490dce 44 #define D_CS P0_13
wim 2:8aba07490dce 45 //#define D_INTR P0_7
wim 5:c75ddfd44ae3 46 //#define D_RST P0_8
wim 2:8aba07490dce 47
wim 2:8aba07490dce 48 // Serial for LPC812
wim 2:8aba07490dce 49 #define D_TX P0_4
wim 2:8aba07490dce 50 #define D_RX P0_0
wim 2:8aba07490dce 51 //#define D_RST P0_9
wim 2:8aba07490dce 52 //#define D_STS P0_17
wim 2:8aba07490dce 53 #endif
wim 2:8aba07490dce 54
wim 2:8aba07490dce 55
wim 0:d83a90125711 56 //SPI Version
whatnick 6:b3a16b127073 57 //SPI spi(D_MOSI, D_MISO, D_SCLK); //MOSI, MISO, SCK
wim 5:c75ddfd44ae3 58 //SC16IS750_SPI serial_bridge(&spi, D_CS);
wim 5:c75ddfd44ae3 59 //SC16IS750_SPI serial_bridge(&spi, D_CS, D_RST); // version with Hardware Reset pin
whatnick 6:b3a16b127073 60 //SC16IS752_SPI serial_bridge(&spi, D_CS, D_RST, SC16IS750::Channel_A); // Dual UART version with Hardware Reset pin
whatnick 6:b3a16b127073 61 //SC16IS752_SPI serial_bridge_B(&spi, D_CS, D_RST, SC16IS750::Channel_B); // Dual UART version with Hardware Reset pin
wim 0:d83a90125711 62
wim 0:d83a90125711 63 //I2C Version
wim 2:8aba07490dce 64 //I2C i2c(D_SDA, D_SCL); //SDA, SCL
whatnick 6:b3a16b127073 65 #define DEFAULT_SC16IS750_ADDR 0x4D
whatnick 6:b3a16b127073 66 #define I2C_FREQ 100000
whatnick 6:b3a16b127073 67 I2C i2c(I2C_SDA, I2C_SCL);
whatnick 6:b3a16b127073 68 SC16IS750_I2C serial_bridge(&i2c, DEFAULT_SC16IS750_ADDR);
wim 5:c75ddfd44ae3 69 //SC16IS750_I2C serial_bridge(&i2c, DEFAULT_SC16IS750_ADDR, D_RST);
wim 0:d83a90125711 70
whatnick 6:b3a16b127073 71 //DigitalOut myled1(LED_RED);
wim 1:f0d3984f2586 72 //DigitalOut myled2(LED_GREEN);
wim 1:f0d3984f2586 73 //DigitalOut myled3(LED_BLUE); // Same as PTD1 (SCK)
whatnick 6:b3a16b127073 74 //DigitalOut heartbeatLED(LED_GREEN);
wim 0:d83a90125711 75
whatnick 6:b3a16b127073 76 //Serial pc(D_TX,D_RX);
whatnick 6:b3a16b127073 77 #define DEBUG
whatnick 6:b3a16b127073 78
whatnick 6:b3a16b127073 79 #ifdef DEBUG
whatnick 6:b3a16b127073 80 #include "USBSerial.h" // To use USB virtual serial, a driver is needed, check http://mbed.org/handbook/USBSerial
whatnick 6:b3a16b127073 81 #define LOG(args...) pc.printf(args)
whatnick 6:b3a16b127073 82 USBSerial pc;
whatnick 6:b3a16b127073 83 #else
whatnick 6:b3a16b127073 84 #define LOG(args...)
whatnick 6:b3a16b127073 85 #endif
wim 0:d83a90125711 86
wim 1:f0d3984f2586 87 void show_menu() {
wim 1:f0d3984f2586 88 pc.printf("0: Exit\n\r");
wim 1:f0d3984f2586 89 pc.printf("1: Show Menu\n\r");
wim 1:f0d3984f2586 90 pc.printf("2: Init\n\r");
wim 3:3d4269319b51 91 pc.printf("3: IO Port Out\n\r");
wim 3:3d4269319b51 92 pc.printf("4: Transparant mode\n\r");
wim 2:8aba07490dce 93 pc.printf("5: Free bufferspace\n\r");
wim 2:8aba07490dce 94 pc.printf("6: Enable RTS/CTS\n\r");
wim 2:8aba07490dce 95 pc.printf("7: Disable RTS/CTS\n\r");
wim 3:3d4269319b51 96 pc.printf("8: Write block\n\r");
wim 3:3d4269319b51 97 pc.printf("9: Baudrate 9600\n\r");
wim 3:3d4269319b51 98 pc.printf("A: Baudrate 115200\n\r");
wim 3:3d4269319b51 99 pc.printf("B: Transparant mode with bufferdisplay\n\r");
wim 3:3d4269319b51 100 pc.printf("C: Test printf \n\r");
wim 1:f0d3984f2586 101
wim 3:3d4269319b51 102 #if(0)
wim 1:f0d3984f2586 103 pc.printf("D: \n\r");
wim 1:f0d3984f2586 104 pc.printf("P: \n\r");
wim 1:f0d3984f2586 105 #endif
wim 1:f0d3984f2586 106 pc.printf("\n\r");
wim 1:f0d3984f2586 107 }
wim 1:f0d3984f2586 108
wim 1:f0d3984f2586 109 // Variables for Heartbeat and Status monitoring
wim 1:f0d3984f2586 110 Ticker heartbeat;
wim 1:f0d3984f2586 111 bool heartbeatflag=false;
wim 1:f0d3984f2586 112
wim 1:f0d3984f2586 113 // Local functions
wim 1:f0d3984f2586 114 void clear_screen() {
wim 1:f0d3984f2586 115 //ANSI Terminal Commands
wim 1:f0d3984f2586 116 pc.printf("\x1B[2J");
wim 1:f0d3984f2586 117 pc.printf("\x1B[H");
wim 1:f0d3984f2586 118 }
wim 1:f0d3984f2586 119
wim 1:f0d3984f2586 120
wim 1:f0d3984f2586 121 // Heartbeat monitor
wim 1:f0d3984f2586 122 void pulse() {
whatnick 6:b3a16b127073 123 //heartbeatLED = !heartbeatLED;
wim 1:f0d3984f2586 124 }
wim 1:f0d3984f2586 125
wim 1:f0d3984f2586 126 void heartbeat_start() {
wim 1:f0d3984f2586 127 heartbeat.attach(&pulse, 0.5);
wim 1:f0d3984f2586 128 }
wim 1:f0d3984f2586 129
wim 1:f0d3984f2586 130 void heartbeat_stop() {
wim 1:f0d3984f2586 131 heartbeat.detach();
wim 1:f0d3984f2586 132 }
wim 1:f0d3984f2586 133
wim 1:f0d3984f2586 134
wim 0:d83a90125711 135 int main() {
wim 1:f0d3984f2586 136 bool running=true;
wim 2:8aba07490dce 137 bool running_test=true;
wim 2:8aba07490dce 138 char command, ch;
wim 1:f0d3984f2586 139 int i=0;
wim 1:f0d3984f2586 140
wim 2:8aba07490dce 141 #if defined(TARGET_LPC1768)
wim 2:8aba07490dce 142 pc.printf("\r\nHello World from LPC1768\r\n");
wim 2:8aba07490dce 143 #endif
wim 2:8aba07490dce 144 #if defined(TARGET_KL25Z)
wim 2:8aba07490dce 145 pc.printf("\r\nHello World from KL25Z\r\n");
wim 2:8aba07490dce 146 #endif
wim 2:8aba07490dce 147 #if defined(TARGET_LPC812)
wim 2:8aba07490dce 148 pc.printf("\r\nHello World from LPC812\r\n");
wim 2:8aba07490dce 149 #endif
wim 2:8aba07490dce 150
wim 1:f0d3984f2586 151
wim 1:f0d3984f2586 152 heartbeat_start();
wim 1:f0d3984f2586 153
whatnick 6:b3a16b127073 154 //myled1 = 1; // LED Off
wim 1:f0d3984f2586 155
wim 1:f0d3984f2586 156 // We need to enable flow control or we overflow buffers and
wim 1:f0d3984f2586 157 // lose data when used with the WiFly. Note that flow control
wim 1:f0d3984f2586 158 // needs to be enabled on the WiFly for this to work but it's
wim 1:f0d3984f2586 159 // possible to do that with flow control enabled here but not there.
wim 1:f0d3984f2586 160 // serial_bridge.set_flow_control(SC16IS750::RTSCTS);
wim 1:f0d3984f2586 161
wim 1:f0d3984f2586 162 serial_bridge.ioSetDirection(0xFF); // All outputs
wim 1:f0d3984f2586 163 serial_bridge.ioSetState(0x00); // All On
wim 1:f0d3984f2586 164
wim 1:f0d3984f2586 165 show_menu();
wim 1:f0d3984f2586 166
wim 1:f0d3984f2586 167 while(running) {
wim 0:d83a90125711 168
wim 1:f0d3984f2586 169 if(pc.readable()) {
wim 1:f0d3984f2586 170 command = pc.getc();
wim 1:f0d3984f2586 171 pc.printf("command= %c \n\r", command);
wim 1:f0d3984f2586 172
wim 1:f0d3984f2586 173 switch (command) {
wim 1:f0d3984f2586 174 case '0' :
wim 1:f0d3984f2586 175 pc.printf("Done\n\r");
wim 1:f0d3984f2586 176 running = false;
wim 1:f0d3984f2586 177 break;
wim 1:f0d3984f2586 178
wim 1:f0d3984f2586 179 case '1' :
wim 1:f0d3984f2586 180 show_menu();
wim 1:f0d3984f2586 181 break;
wim 1:f0d3984f2586 182
wim 1:f0d3984f2586 183 case '2' :
wim 5:c75ddfd44ae3 184 pc.printf("Hardware Reset\n\r");
wim 5:c75ddfd44ae3 185 serial_bridge.hwReset(); //test
wim 5:c75ddfd44ae3 186
wim 5:c75ddfd44ae3 187 pc.printf("Init\n\r");
wim 1:f0d3984f2586 188 serial_bridge._init();
wim 1:f0d3984f2586 189 break;
wim 1:f0d3984f2586 190
wim 1:f0d3984f2586 191 case '3' :
wim 3:3d4269319b51 192 pc.printf("IO Port Out\n\r");
wim 1:f0d3984f2586 193
wim 1:f0d3984f2586 194 i=0;
wim 1:f0d3984f2586 195 while (!pc.readable()) {
wim 1:f0d3984f2586 196 serial_bridge.ioSetState(~i);
wim 1:f0d3984f2586 197 serial_bridge.ioGetState() ; //test
wim 1:f0d3984f2586 198 wait(0.5);
wim 1:f0d3984f2586 199 pc.putc('*');
wim 1:f0d3984f2586 200 i=(i+1) & 0xFF;
wim 1:f0d3984f2586 201 }
wim 1:f0d3984f2586 202
wim 1:f0d3984f2586 203 pc.getc();
wim 3:3d4269319b51 204 pc.printf("IO Port Out Done\n\r");
wim 1:f0d3984f2586 205 break;
wim 1:f0d3984f2586 206
wim 1:f0d3984f2586 207 case '4' :
wim 3:3d4269319b51 208 pc.printf("Transparant Mode, Enter '#' to quit...\n\r");
wim 1:f0d3984f2586 209
wim 2:8aba07490dce 210 running_test=true;
wim 2:8aba07490dce 211
wim 1:f0d3984f2586 212 while (running_test) {
wim 1:f0d3984f2586 213 // From SPI/I2C to serial
wim 1:f0d3984f2586 214 while (running_test && pc.readable()) {
wim 1:f0d3984f2586 215 ch = pc.getc();
wim 3:3d4269319b51 216 running_test = (ch != '#');
wim 1:f0d3984f2586 217 serial_bridge.putc(ch);
wim 1:f0d3984f2586 218 }
wim 1:f0d3984f2586 219
wim 1:f0d3984f2586 220 // From Serial to SPI/I2C
wim 1:f0d3984f2586 221 while (running_test && serial_bridge.readable()) {
wim 1:f0d3984f2586 222 ch = serial_bridge.getc();
wim 3:3d4269319b51 223 running_test = (ch != '#');
wim 1:f0d3984f2586 224 pc.putc(ch);
wim 1:f0d3984f2586 225 }
wim 1:f0d3984f2586 226
wim 1:f0d3984f2586 227 }
wim 1:f0d3984f2586 228
wim 3:3d4269319b51 229 pc.printf("\n\rTransparant Mode done\n\r");
wim 1:f0d3984f2586 230 break;
wim 1:f0d3984f2586 231
wim 2:8aba07490dce 232 case '5' :
wim 2:8aba07490dce 233 pc.printf("Available for Reading = %3d (Free Space = %3d)\n\r", serial_bridge.readableCount(), SC16IS750_FIFO_RX - serial_bridge.readableCount());
wim 2:8aba07490dce 234 pc.printf("Available for Writing = %3d (Used Space = %3d)\n\r", serial_bridge.writableCount(), SC16IS750_FIFO_TX - serial_bridge.writableCount());
wim 2:8aba07490dce 235 break;
wim 2:8aba07490dce 236
wim 2:8aba07490dce 237 case '6' :
wim 2:8aba07490dce 238 pc.printf("Enable RTS/CTS\n\r");
wim 2:8aba07490dce 239 serial_bridge.set_flow_control(SC16IS750::RTSCTS);
wim 2:8aba07490dce 240 break;
wim 2:8aba07490dce 241 case '7' :
wim 2:8aba07490dce 242 pc.printf("Disable RTS/CTS\n\r");
wim 2:8aba07490dce 243 serial_bridge.set_flow_control(SC16IS750::Disabled);
wim 2:8aba07490dce 244 break;
wim 2:8aba07490dce 245
wim 2:8aba07490dce 246 case '8' :
wim 2:8aba07490dce 247 pc.printf("Write block\n\r");
wim 3:3d4269319b51 248 serial_bridge.writeString("Hello World from mbed and SC16IS750 ");
wim 3:3d4269319b51 249 break;
wim 3:3d4269319b51 250
wim 3:3d4269319b51 251 case '9' :
wim 3:3d4269319b51 252 pc.printf("Baudrate = 9600, Divisor = %d\n\r", SC16IS750_BAUDRATE_DIVISOR(9600));
wim 3:3d4269319b51 253 serial_bridge.baud(9600);
wim 3:3d4269319b51 254 break;
wim 3:3d4269319b51 255
wim 3:3d4269319b51 256 case 'A' :
wim 3:3d4269319b51 257 pc.printf("Baudrate = 115200, Divisor = %d\n\r", SC16IS750_BAUDRATE_DIVISOR(115200));
wim 3:3d4269319b51 258 serial_bridge.baud(115200);
wim 2:8aba07490dce 259 break;
wim 2:8aba07490dce 260
wim 3:3d4269319b51 261 case 'B' :
wim 3:3d4269319b51 262 pc.printf("Transparant Mode with buffer display, Enter '#' to quit...\n\r");
wim 3:3d4269319b51 263
wim 3:3d4269319b51 264 running_test=true;
wim 3:3d4269319b51 265
wim 3:3d4269319b51 266 while (running_test) {
wim 3:3d4269319b51 267 // From SPI/I2C to serial
wim 3:3d4269319b51 268 while (running_test && pc.readable()) {
wim 3:3d4269319b51 269 ch = pc.getc();
wim 3:3d4269319b51 270 running_test = (ch != '#');
wim 3:3d4269319b51 271 serial_bridge.putc(ch);
wim 3:3d4269319b51 272
wim 3:3d4269319b51 273 // Show buffers when character was entered
wim 3:3d4269319b51 274 pc.printf("\n\r");
wim 3:3d4269319b51 275 pc.printf("Available for Reading = %3d (Free Space = %3d)\n\r", serial_bridge.readableCount(), SC16IS750_FIFO_RX - serial_bridge.readableCount());
wim 3:3d4269319b51 276 pc.printf("Available for Writing = %3d (Used Space = %3d)\n\r", serial_bridge.writableCount(), SC16IS750_FIFO_TX - serial_bridge.writableCount());
wim 3:3d4269319b51 277 }
wim 3:3d4269319b51 278
wim 3:3d4269319b51 279
wim 3:3d4269319b51 280 // From Serial to SPI/I2C
wim 3:3d4269319b51 281 while (running_test && serial_bridge.readable()) {
wim 3:3d4269319b51 282 ch = serial_bridge.getc();
wim 3:3d4269319b51 283 running_test = (ch != '#');
wim 3:3d4269319b51 284 pc.putc(ch);
wim 3:3d4269319b51 285 }
wim 3:3d4269319b51 286
wim 3:3d4269319b51 287 }
wim 3:3d4269319b51 288
wim 3:3d4269319b51 289 pc.printf("\n\rTransparant Mode done\n\r");
wim 3:3d4269319b51 290 break;
wim 3:3d4269319b51 291
wim 3:3d4269319b51 292 case 'C' :
wim 3:3d4269319b51 293 pc.printf("Test printf() \n\r");
wim 3:3d4269319b51 294
wim 3:3d4269319b51 295 serial_bridge.printf("Available for Reading = %3d (Free Space = %3d)\n\r", serial_bridge.readableCount(), SC16IS750_FIFO_RX - serial_bridge.readableCount() );
wim 3:3d4269319b51 296 serial_bridge.printf("Available for Writing = %3d (Used Space = %3d)\n\r", serial_bridge.writableCount(), SC16IS750_FIFO_TX - serial_bridge.writableCount());
wim 3:3d4269319b51 297
wim 3:3d4269319b51 298 pc.printf("\n\rTest printf() done\n\r");
wim 3:3d4269319b51 299 break;
wim 1:f0d3984f2586 300 default :
wim 2:8aba07490dce 301 break;
wim 1:f0d3984f2586 302
wim 1:f0d3984f2586 303 } //switch
wim 1:f0d3984f2586 304 } //if
wim 1:f0d3984f2586 305 } //while
wim 5:c75ddfd44ae3 306
wim 0:d83a90125711 307 pc.printf("\nBye World!\n");
wim 0:d83a90125711 308 }