operation test on Mbed OS6

Dependencies:   SC18IS606

Committer:
okano
Date:
Thu Jul 29 18:54:47 2021 +0000
Revision:
0:e6cd94d6b17a
operation test on OS6

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okano 0:e6cd94d6b17a 1 /*
okano 0:e6cd94d6b17a 2 * "Hello code" for SC18IS606 library
okano 0:e6cd94d6b17a 3 *
okano 0:e6cd94d6b17a 4 * @author Akifumi (Tedd) OKANO, NXP Semiconductors
okano 0:e6cd94d6b17a 5 * @version 0.2
okano 0:e6cd94d6b17a 6 * @date 28-July-2021
okano 0:e6cd94d6b17a 7 *
okano 0:e6cd94d6b17a 8 * SC18IS606 is an "I2C-bus to SPI bridge"
okano 0:e6cd94d6b17a 9 * http://www.nxp.com/ (product infomation page will be updated later)
okano 0:e6cd94d6b17a 10 */
okano 0:e6cd94d6b17a 11
okano 0:e6cd94d6b17a 12 #include "mbed.h"
okano 0:e6cd94d6b17a 13 #include "SC18IS606.h"
okano 0:e6cd94d6b17a 14
okano 0:e6cd94d6b17a 15 I2C i2c( p28, p27 );
okano 0:e6cd94d6b17a 16 InterruptIn int_line( p21 );
okano 0:e6cd94d6b17a 17 SC18IS606 bridge( i2c ); // make a SC18IS606 instance as "bridge"
okano 0:e6cd94d6b17a 18
okano 0:e6cd94d6b17a 19 #define I2C_FREQUENCY (400 * 1000) // Hz
okano 0:e6cd94d6b17a 20 #define SLAVE_SELECT_NUM 0
okano 0:e6cd94d6b17a 21 #define DATA_LENGTH 256
okano 0:e6cd94d6b17a 22
okano 0:e6cd94d6b17a 23 void data_check( char *data, int length );
okano 0:e6cd94d6b17a 24
okano 0:e6cd94d6b17a 25 volatile int int_flag = false;
okano 0:e6cd94d6b17a 26
okano 0:e6cd94d6b17a 27 void int_handler()
okano 0:e6cd94d6b17a 28 {
okano 0:e6cd94d6b17a 29 int_flag = true;
okano 0:e6cd94d6b17a 30 }
okano 0:e6cd94d6b17a 31
okano 0:e6cd94d6b17a 32 void wait_transfer_done( void )
okano 0:e6cd94d6b17a 33 {
okano 0:e6cd94d6b17a 34 while ( !int_flag )
okano 0:e6cd94d6b17a 35 ;
okano 0:e6cd94d6b17a 36
okano 0:e6cd94d6b17a 37 bridge.clear_interrupt();
okano 0:e6cd94d6b17a 38 int_flag = false;
okano 0:e6cd94d6b17a 39 }
okano 0:e6cd94d6b17a 40
okano 0:e6cd94d6b17a 41 void hardware_settings( void )
okano 0:e6cd94d6b17a 42 {
okano 0:e6cd94d6b17a 43 int_line.mode( PullUp );
okano 0:e6cd94d6b17a 44 int_line.fall( &int_handler );
okano 0:e6cd94d6b17a 45 i2c.frequency( I2C_FREQUENCY );
okano 0:e6cd94d6b17a 46 }
okano 0:e6cd94d6b17a 47
okano 0:e6cd94d6b17a 48 int main()
okano 0:e6cd94d6b17a 49 {
okano 0:e6cd94d6b17a 50 printf( "SC18IS606 Hello\r\n" );
okano 0:e6cd94d6b17a 51
okano 0:e6cd94d6b17a 52 hardware_settings();
okano 0:e6cd94d6b17a 53 bridge.install_wait_func( wait_transfer_done );
okano 0:e6cd94d6b17a 54
okano 0:e6cd94d6b17a 55 printf( "%s\r\n", bridge.read_version() );
okano 0:e6cd94d6b17a 56
okano 0:e6cd94d6b17a 57 char snd_data[ DATA_LENGTH ];
okano 0:e6cd94d6b17a 58 char rcv_data[ DATA_LENGTH ];
okano 0:e6cd94d6b17a 59
okano 0:e6cd94d6b17a 60 for ( int i = 0; i < DATA_LENGTH; i++ ) {
okano 0:e6cd94d6b17a 61 snd_data[ i ] = i;
okano 0:e6cd94d6b17a 62 }
okano 0:e6cd94d6b17a 63
okano 0:e6cd94d6b17a 64 while(1) {
okano 0:e6cd94d6b17a 65 bridge.transfer( SLAVE_SELECT_NUM, snd_data, sizeof( snd_data ) );
okano 0:e6cd94d6b17a 66 bridge.read_buffer( rcv_data, sizeof( rcv_data ) );
okano 0:e6cd94d6b17a 67 data_check( rcv_data, DATA_LENGTH );
okano 0:e6cd94d6b17a 68 }
okano 0:e6cd94d6b17a 69 }
okano 0:e6cd94d6b17a 70
okano 0:e6cd94d6b17a 71 void data_check( char *data, int length )
okano 0:e6cd94d6b17a 72 {
okano 0:e6cd94d6b17a 73 for ( int i = 0; i < length; i++ ) {
okano 0:e6cd94d6b17a 74 if ( !(i % 16) )
okano 0:e6cd94d6b17a 75 printf( "\r\n %02X :", i );
okano 0:e6cd94d6b17a 76 printf( " %02X", data[ i ] );
okano 0:e6cd94d6b17a 77 }
okano 0:e6cd94d6b17a 78 }