SC16IS750 TX sample

Dependencies:   mbed SC16IS750

main.cpp

Committer:
okano
Date:
2012-07-17
Revision:
0:41dffa1b3405
Child:
1:40c636cb6d09

File content as of revision 0:41dffa1b3405:

#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 );
}