Tedd OKANO
/
SC18IS606_OS6_Hello
operation test on Mbed OS6
main.cpp@0:e6cd94d6b17a, 2021-07-29 (annotated)
- Committer:
- okano
- Date:
- Thu Jul 29 18:54:47 2021 +0000
- Revision:
- 0:e6cd94d6b17a
operation test on OS6
Who changed what in which revision?
User | Revision | Line number | New 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 | } |