test code
Sample code for SC18IS606 class library
The SC18IS606 : I2C-bus to SPI bridge
Hello program operation sample on Mbed OS6 is available.
Import programSC18IS606_OS6_Hello
operation test on Mbed OS6
This is a "Hello" code for SC18IS606 class library. Showing how to send/receive data to/from SPI bus through this bridge chip.
How to wire the SC18IS606 (using evaluation board)
main.cpp@7:df3611f05b77, 2021-07-28 (annotated)
- Committer:
- okano
- Date:
- Wed Jul 28 01:48:47 2021 +0000
- Revision:
- 7:df3611f05b77
- Parent:
- 6:741cdb9c5726
code cleaned
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okano | 2:6d65d24e55ed | 1 | /* |
okano | 7:df3611f05b77 | 2 | * "Hello code" for SC18IS606 library |
okano | 2:6d65d24e55ed | 3 | * |
okano | 2:6d65d24e55ed | 4 | * @author Akifumi (Tedd) OKANO, NXP Semiconductors |
okano | 7:df3611f05b77 | 5 | * @version 0.2 |
okano | 7:df3611f05b77 | 6 | * @date 28-July-2021 |
okano | 2:6d65d24e55ed | 7 | * |
okano | 2:6d65d24e55ed | 8 | * SC18IS606 is an "I2C-bus to SPI bridge" |
okano | 2:6d65d24e55ed | 9 | * http://www.nxp.com/ (product infomation page will be updated later) |
okano | 2:6d65d24e55ed | 10 | */ |
okano | 2:6d65d24e55ed | 11 | |
okano | 0:45ec5ead6731 | 12 | #include "mbed.h" |
okano | 1:f0126d924ff8 | 13 | #include "SC18IS606.h" |
okano | 0:45ec5ead6731 | 14 | |
okano | 0:45ec5ead6731 | 15 | I2C i2c( p28, p27 ); |
okano | 1:f0126d924ff8 | 16 | InterruptIn int_line( p21 ); |
okano | 7:df3611f05b77 | 17 | SC18IS606 bridge( i2c ); // make a SC18IS606 instance as "bridge" |
okano | 0:45ec5ead6731 | 18 | |
okano | 4:2759b8e6d5ec | 19 | #define I2C_FREQUENCY (400 * 1000) // Hz |
okano | 4:2759b8e6d5ec | 20 | #define SLAVE_SELECT_NUM 0 |
okano | 4:2759b8e6d5ec | 21 | #define DATA_LENGTH 256 |
okano | 4:2759b8e6d5ec | 22 | |
okano | 4:2759b8e6d5ec | 23 | void data_check( char *data, int length ); |
okano | 2:6d65d24e55ed | 24 | |
okano | 0:45ec5ead6731 | 25 | volatile int int_flag = false; |
okano | 0:45ec5ead6731 | 26 | |
okano | 0:45ec5ead6731 | 27 | void int_handler() |
okano | 0:45ec5ead6731 | 28 | { |
okano | 0:45ec5ead6731 | 29 | int_flag = true; |
okano | 0:45ec5ead6731 | 30 | } |
okano | 0:45ec5ead6731 | 31 | |
okano | 6:741cdb9c5726 | 32 | void wait_transfer_done( void ) |
okano | 6:741cdb9c5726 | 33 | { |
okano | 6:741cdb9c5726 | 34 | while ( !int_flag ) |
okano | 6:741cdb9c5726 | 35 | ; |
okano | 6:741cdb9c5726 | 36 | |
okano | 6:741cdb9c5726 | 37 | bridge.clear_interrupt(); |
okano | 6:741cdb9c5726 | 38 | int_flag = false; |
okano | 6:741cdb9c5726 | 39 | } |
okano | 6:741cdb9c5726 | 40 | |
okano | 7:df3611f05b77 | 41 | void hardware_settings( void ) |
okano | 7:df3611f05b77 | 42 | { |
okano | 7:df3611f05b77 | 43 | int_line.mode( PullUp ); |
okano | 7:df3611f05b77 | 44 | int_line.fall( &int_handler ); |
okano | 7:df3611f05b77 | 45 | i2c.frequency( I2C_FREQUENCY ); |
okano | 7:df3611f05b77 | 46 | } |
okano | 7:df3611f05b77 | 47 | |
okano | 0:45ec5ead6731 | 48 | int main() |
okano | 0:45ec5ead6731 | 49 | { |
okano | 2:6d65d24e55ed | 50 | printf( "SC18IS606 Hello\r\n" ); |
okano | 4:2759b8e6d5ec | 51 | |
okano | 7:df3611f05b77 | 52 | hardware_settings(); |
okano | 6:741cdb9c5726 | 53 | bridge.install_wait_func( wait_transfer_done ); |
okano | 0:45ec5ead6731 | 54 | |
okano | 4:2759b8e6d5ec | 55 | char snd_data[ DATA_LENGTH ]; |
okano | 4:2759b8e6d5ec | 56 | char rcv_data[ DATA_LENGTH ]; |
okano | 0:45ec5ead6731 | 57 | |
okano | 4:2759b8e6d5ec | 58 | for ( int i = 0; i < DATA_LENGTH; i++ ) { |
okano | 4:2759b8e6d5ec | 59 | snd_data[ i ] = i; |
okano | 0:45ec5ead6731 | 60 | } |
okano | 0:45ec5ead6731 | 61 | |
okano | 0:45ec5ead6731 | 62 | while(1) { |
okano | 4:2759b8e6d5ec | 63 | bridge.transfer( SLAVE_SELECT_NUM, snd_data, sizeof( snd_data ) ); |
okano | 4:2759b8e6d5ec | 64 | bridge.read_buffer( rcv_data, sizeof( rcv_data ) ); |
okano | 7:df3611f05b77 | 65 | data_check( rcv_data, DATA_LENGTH ); |
okano | 0:45ec5ead6731 | 66 | } |
okano | 0:45ec5ead6731 | 67 | } |
okano | 4:2759b8e6d5ec | 68 | |
okano | 4:2759b8e6d5ec | 69 | void data_check( char *data, int length ) |
okano | 4:2759b8e6d5ec | 70 | { |
okano | 4:2759b8e6d5ec | 71 | for ( int i = 0; i < length; i++ ) { |
okano | 4:2759b8e6d5ec | 72 | if ( !(i % 16) ) |
okano | 4:2759b8e6d5ec | 73 | printf( "\r\n %02X :", i ); |
okano | 4:2759b8e6d5ec | 74 | printf( " %02X", data[ i ] ); |
okano | 4:2759b8e6d5ec | 75 | } |
okano | 4:2759b8e6d5ec | 76 | } |