operation test on Mbed OS6

Dependencies:   SC18IS606

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /*
00002  *  "Hello code" for SC18IS606 library
00003  *
00004  *  @author     Akifumi (Tedd) OKANO, NXP Semiconductors
00005  *  @version    0.2
00006  *  @date       28-July-2021
00007  *
00008  *  SC18IS606 is an "I2C-bus to SPI bridge"
00009  *  http://www.nxp.com/ (product infomation page will be updated later)
00010  */
00011 
00012 #include "mbed.h"
00013 #include "SC18IS606.h"
00014 
00015 I2C         i2c( p28, p27 );
00016 InterruptIn int_line( p21 );
00017 SC18IS606   bridge( i2c );      //  make a SC18IS606 instance as "bridge"
00018 
00019 #define I2C_FREQUENCY       (400 * 1000)    // Hz
00020 #define SLAVE_SELECT_NUM    0
00021 #define DATA_LENGTH         256
00022 
00023 void    data_check( char *data, int length );
00024 
00025 volatile int    int_flag    = false;
00026 
00027 void int_handler()
00028 {
00029     int_flag    = true;
00030 }
00031 
00032 void wait_transfer_done( void )
00033 {
00034     while ( !int_flag )
00035         ;
00036 
00037     bridge.clear_interrupt();
00038     int_flag    = false;
00039 }
00040 
00041 void hardware_settings( void )
00042 {
00043     int_line.mode( PullUp );
00044     int_line.fall( &int_handler );
00045     i2c.frequency( I2C_FREQUENCY );
00046 }
00047 
00048 int main()
00049 {
00050     printf( "SC18IS606 Hello\r\n" );
00051 
00052     hardware_settings();
00053     bridge.install_wait_func( wait_transfer_done );
00054 
00055     printf( "%s\r\n", bridge.read_version() );
00056     
00057     char    snd_data[ DATA_LENGTH ];
00058     char    rcv_data[ DATA_LENGTH ]; 
00059 
00060     for ( int i = 0; i < DATA_LENGTH; i++ ) {
00061         snd_data[ i ]  = i;
00062     }
00063 
00064     while(1) {
00065         bridge.transfer( SLAVE_SELECT_NUM, snd_data, sizeof( snd_data ) );
00066         bridge.read_buffer( rcv_data, sizeof( rcv_data ) );
00067         data_check( rcv_data, DATA_LENGTH );
00068     }
00069 }
00070 
00071 void data_check( char *data, int length )
00072 {
00073     for ( int i = 0; i < length; i++ ) {
00074         if ( !(i % 16) )
00075             printf( "\r\n %02X :", i );
00076         printf( " %02X", data[ i ] );
00077     }
00078 }