Wim Huiskamp
/
mbed_SC16IS750
Test for SC16IS750 and SC16IS752 I2C or SPI to UART bridge.
Revision 0:20d8ef79d787, committed 2014-12-24
- Comitter:
- wim
- Date:
- Wed Dec 24 01:09:26 2014 +0000
- Commit message:
- Test for v04 of lib. Set I2C clock at 100kb/s for reliable operation.
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SC16IS750.lib Wed Dec 24 01:09:26 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/wim/code/SC16IS750/#ff3e57bebb6a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Dec 24 01:09:26 2014 +0000 @@ -0,0 +1,320 @@ +#include "mbed.h" +#include "SC16IS750.h" + + +#if defined(TARGET_LPC1768) +// SPI for LPC1768 +#define D_MOSI p5 +#define D_MISO p6 +#define D_SCLK p7 +#define D_CS p8 +#define D_INTR p15 +#define D_RST p16 + +// I2C for KL25Z +#define D_SCL p10 +#define D_SDA p9 + +// Serial for LPC1768 +#define D_TX USBTX +#define D_RX USBRX +//#define D_RST p25 +//#define D_STS p26 + +DigitalOut myled1(LED1); +//DigitalOut myled2(LED2); +//DigitalOut myled3(LED3); +DigitalOut heartbeatLED(LED4); +#endif + +#if defined(TARGET_KL25Z) +// SPI for KL25Z +#define D_MOSI PTD2 +#define D_MISO PTD3 +#define D_SCLK PTD1 +#define D_CS PTD0 +//#define D_INTR PTA13 +#define D_RST PTD5 + +// I2C for KL25Z +#define D_SCL PTE1 +#define D_SDA PTE0 + +// Serial for KL25Z +#define D_TX USBTX +#define D_RX USBRX + +DigitalOut myled1(LED_RED); +//DigitalOut myled2(LED_GREEN); +//DigitalOut myled3(LED_BLUE); // Same as PTD1 (SCK) +DigitalOut heartbeatLED(LED_GREEN); +#endif + +#if defined(TARGET_LPC812) +// SPI for LPC812 +#define D_MOSI P0_14 +#define D_MISO P0_15 +#define D_SCLK P0_12 +#define D_CS P0_13 +//#define D_INTR P0_7 +//#define D_RST P0_8 + +// Serial for LPC812 +#define D_TX P0_4 +#define D_RX P0_0 +//#define D_RST P0_9 +//#define D_STS P0_17 +#endif + + +//SPI Version +SPI spi(D_MOSI, D_MISO, D_SCLK); //MOSI, MISO, SCK +//SC16IS750_SPI serial_bridge(&spi, D_CS); +//SC16IS750_SPI serial_bridge(&spi, D_CS, D_RST); // version with Hardware Reset pin +//SC16IS752_SPI serial_bridge(&spi, D_CS, D_RST, SC16IS750::Channel_A); // Dual UART version with Hardware Reset pin +//SC16IS752_SPI serial_bridge(&spi, D_CS, D_RST, SC16IS750::Channel_B); // Dual UART version with Hardware Reset pin + +//I2C Version +I2C i2c(D_SDA, D_SCL); //SDA, SCL +//SC16IS750_I2C serial_bridge(&i2c, SC16IS750_DEFAULT_ADDR); +//SC16IS750_I2C serial_bridge(&i2c, SC16IS750_DEFAULT_ADDR, D_RST); +SC16IS752_I2C serial_bridge(&i2c, SC16IS750_DEFAULT_ADDR, D_RST, SC16IS750::Channel_A); // Dual UART version with Hardware Reset pin +//SC16IS752_I2C serial_bridge(&i2c, SC16IS750_DEFAULT_ADDR, D_RST, SC16IS750::Channel_B); // Dual UART version with Hardware Reset pin + + +Serial pc(D_TX,D_RX); + +void show_menu() { + pc.printf("0: Exit\n\r"); + pc.printf("1: Show Menu\n\r"); + pc.printf("2: Init\n\r"); + pc.printf("3: IO Port Out\n\r"); + pc.printf("4: Transparant mode\n\r"); + pc.printf("5: Free bufferspace\n\r"); + pc.printf("6: Enable RTS/CTS\n\r"); + pc.printf("7: Disable RTS/CTS\n\r"); + pc.printf("8: Write block\n\r"); + pc.printf("9: Baudrate 9600\n\r"); + pc.printf("A: Baudrate 115200\n\r"); + pc.printf("B: Transparant mode with bufferdisplay\n\r"); + pc.printf("C: Test printf \n\r"); + pc.printf("D: Test connected\n\r"); + + #if(0) + pc.printf("D: \n\r"); + pc.printf("P: \n\r"); +#endif + pc.printf("\n\r"); +} + +// Variables for Heartbeat and Status monitoring +Ticker heartbeat; +bool heartbeatflag=false; + +// Local functions +void clear_screen() { +//ANSI Terminal Commands + pc.printf("\x1B[2J"); + pc.printf("\x1B[H"); +} + + +// Heartbeat monitor +void pulse() { + heartbeatLED = !heartbeatLED; +} + +void heartbeat_start() { + heartbeat.attach(&pulse, 0.5); +} + +void heartbeat_stop() { + heartbeat.detach(); +} + + +int main() { + bool running=true; + bool running_test=true; + char command, ch; + int i=0; + +#if defined(TARGET_LPC1768) + pc.printf("\r\nHello World from LPC1768\r\n"); +#endif +#if defined(TARGET_KL25Z) + pc.printf("\r\nHello World from KL25Z\r\n"); +#endif +#if defined(TARGET_LPC812) + pc.printf("\r\nHello World from LPC812\r\n"); +#endif + + + heartbeat_start(); + + myled1 = 1; // LED Off + + // We need to enable flow control or we overflow buffers and + // lose data when used with the WiFly. Note that flow control + // needs to be enabled on the WiFly for this to work but it's + // possible to do that with flow control enabled here but not there. +// serial_bridge.set_flow_control(SC16IS750::RTSCTS); + + serial_bridge.ioSetDirection(0xFF); // All outputs + serial_bridge.ioSetState(0xFF); // All On + + show_menu(); + + while(running) { + + if(pc.readable()) { + command = pc.getc(); + pc.printf("command= %c \n\r", command); + + switch (command) { + case '0' : + pc.printf("Done\n\r"); + running = false; + break; + + case '1' : + show_menu(); + break; + + case '2' : + pc.printf("Hardware Reset\n\r"); + serial_bridge.hwReset(); //test + + pc.printf("Init\n\r"); + serial_bridge._init(); + pc.printf("Hardware Init done\n\r"); + break; + + case '3' : + pc.printf("IO Port Out\n\r"); + + i=0; + while (!pc.readable()) { + serial_bridge.ioSetState(~i); +// serial_bridge.ioGetState() ; //test + wait(0.5); + pc.putc('*'); + i=(i+1) & 0xFF; + } + + pc.getc(); + pc.printf("IO Port Out Done\n\r"); + break; + + case '4' : + pc.printf("Transparant Mode, Enter '#' to quit...\n\r"); + + running_test=true; + + while (running_test) { + // From SPI/I2C to serial + while (running_test && pc.readable()) { + ch = pc.getc(); + running_test = (ch != '#'); + serial_bridge.putc(ch); + } + + // From Serial to SPI/I2C + while (running_test && serial_bridge.readable()) { + ch = serial_bridge.getc(); + running_test = (ch != '#'); + pc.putc(ch); + } + + } + + pc.printf("\n\rTransparant Mode done\n\r"); + break; + + case '5' : + pc.printf("Available for Reading = %3d (Free Space = %3d)\n\r", serial_bridge.readableCount(), SC16IS750_FIFO_RX - serial_bridge.readableCount()); + pc.printf("Available for Writing = %3d (Used Space = %3d)\n\r", serial_bridge.writableCount(), SC16IS750_FIFO_TX - serial_bridge.writableCount()); + break; + + case '6' : + pc.printf("Enable RTS/CTS\n\r"); + serial_bridge.set_flow_control(SC16IS750::RTSCTS); + break; + case '7' : + pc.printf("Disable RTS/CTS\n\r"); + serial_bridge.set_flow_control(SC16IS750::Disabled); + break; + + case '8' : + pc.printf("Write block\n\r"); + serial_bridge.writeString("Hello World from mbed and SC16IS750 "); + break; + + case '9' : + pc.printf("Baudrate = 9600, Divisor = %d\n\r", SC16IS750_BAUDRATE_DIVISOR(9600)); + serial_bridge.baud(9600); + break; + + case 'A' : + pc.printf("Baudrate = 115200, Divisor = %d\n\r", SC16IS750_BAUDRATE_DIVISOR(115200)); + serial_bridge.baud(115200); + break; + + case 'B' : + pc.printf("Transparant Mode with buffer display, Enter '#' to quit...\n\r"); + + running_test=true; + + while (running_test) { + // From SPI/I2C to serial + while (running_test && pc.readable()) { + ch = pc.getc(); + running_test = (ch != '#'); + serial_bridge.putc(ch); + + // Show buffers when character was entered + pc.printf("\n\r"); + pc.printf("Available for Reading = %3d (Free Space = %3d)\n\r", serial_bridge.readableCount(), SC16IS750_FIFO_RX - serial_bridge.readableCount()); + pc.printf("Available for Writing = %3d (Used Space = %3d)\n\r", serial_bridge.writableCount(), SC16IS750_FIFO_TX - serial_bridge.writableCount()); + } + + + // From Serial to SPI/I2C + while (running_test && serial_bridge.readable()) { + ch = serial_bridge.getc(); + running_test = (ch != '#'); + pc.putc(ch); + } + + } + + pc.printf("\n\rTransparant Mode done\n\r"); + break; + + case 'C' : + pc.printf("Test printf() \n\r"); + + serial_bridge.printf("Available for Reading = %3d (Free Space = %3d)\n\r", serial_bridge.readableCount(), SC16IS750_FIFO_RX - serial_bridge.readableCount() ); + serial_bridge.printf("Available for Writing = %3d (Used Space = %3d)\n\r", serial_bridge.writableCount(), SC16IS750_FIFO_TX - serial_bridge.writableCount()); + + pc.printf("\n\rTest printf() done\n\r"); + break; + case 'D' : + pc.printf("Test connected\n\r"); + if(!serial_bridge.connected()){ + pc.printf("Failed to detect UART bridge\r\n"); + } + else { + pc.printf("Found UART bridge!\r\n"); + } + break; + default : + break; + + } //switch + } //if + } //while + + pc.printf("\nBye World!\n"); +} + \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Dec 24 01:09:26 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/4fc01daae5a5 \ No newline at end of file