SC16IS750 TX sample

Dependencies:   mbed SC16IS750

Revision:
0:41dffa1b3405
Child:
1:40c636cb6d09
diff -r 000000000000 -r 41dffa1b3405 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Jul 17 08:48:07 2012 +0000
@@ -0,0 +1,102 @@
+#include "mbed.h"
+
+I2C     i2c( p28, p27 );
+
+
+enum {
+    RHR         = 0x00 << 3,
+    THR         = 0x00 << 3,
+    IER         = 0x01 << 3,
+    FCR         = 0x02 << 3,
+    IIR         = 0x02 << 3,
+    LCR         = 0x03 << 3,
+    MCR         = 0x04 << 3,
+    LSR         = 0x05 << 3,
+    MSR         = 0x06 << 3,
+    SPR         = 0x07 << 3,
+    TCR         = 0x06 << 3,
+    TLR         = 0x07 << 3,
+    TXLVL       = 0x08 << 3,
+    RXLVL       = 0x09 << 3,
+    IODir       = 0x0A << 3,
+    IOState     = 0x0B << 3,
+    IOIntEna    = 0x0C << 3,
+    reserved    = 0x0D << 3,
+    IOControl   = 0x0E << 3,
+    EFCR        = 0x0F << 3,
+    DLL         = 0x00 << 3,
+    DLH         = 0x01 << 3,
+    EFR         = 0x02 << 3,
+    XON1        = 0x04 << 3,
+    XON2        = 0x05 << 3,
+    XOFF1       = 0x06 << 3,
+    XOFF2       = 0x07 << 3,
+};
+
+#define ADDR    0x9A
+char    three[]  = { 0x03, 0xBF };
+char    data[]  = { 0x0A, 0xBF };
+
+#define N_OF_ACCESS 8
+
+char    init[ N_OF_ACCESS ][ 2 ] = {
+    { LCR, 0x80 },
+#ifdef BAUD_115200
+    { DLL, 0x0C },
+    { DLH, 0x00 },
+#else
+    { DLL, 0x60 },  //  9600 baud
+    { DLH, 0x00 },
+#endif
+    { LCR, 0xBF },
+    { EFR, 0x10 },
+    { LCR, 0x03 },
+    { IER, 0x00 },
+    { FCR, 0x07 },
+};
+
+char    *txt_data    = "\x0NXP Semiconductors";
+
+void init_registers( void );
+void register_write( char address, char data );
+char register_read( char address );
+
+int main() {
+    char    r;
+
+    init_registers();
+
+#ifdef SINGLE_TX_BUFFER_WRITES
+    txt_data++;
+    for ( int i = 0; i < 18; i++ )
+        register_write( THR, *txt_data++ );
+#else
+    i2c.write( ADDR, txt_data, 19 );
+#endif
+
+    while ( 1 )
+        ;
+}
+
+void init_registers( void ) {
+    for ( int i = 0; i <  N_OF_ACCESS; i++ )
+        i2c.write( ADDR, init[ i ], 2 );
+}
+
+void register_write( char address, char data ) {
+    char    w[ 2 ];
+
+    w[ 0 ]  = address;
+    w[ 1 ]  = data;
+
+    i2c.write( 0x9A, w, 2 );
+}
+
+char register_read( char address ) {
+    char    r;
+
+    i2c.write( 0x9A, &address, 1 );
+    i2c.read( 0x9A, &r, 1 );
+
+    return ( r );
+}