test version 0.2
Dependents: SC18IS606_Hello SC18IS606_EEPROM_access_test SC18IS606_OS6_Hello
SC18IS606.cpp@4:ac0aef91fd94, 2021-07-25 (annotated)
- Committer:
- okano
- Date:
- Sun Jul 25 08:30:08 2021 +0000
- Revision:
- 4:ac0aef91fd94
- Parent:
- 3:47f1f22747cc
- Child:
- 5:436b2c7854e8
transfer complete wait function implemented
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okano | 1:b44f801ac9f2 | 1 | /* |
okano | 1:b44f801ac9f2 | 2 | * SC18IS606 library |
okano | 1:b44f801ac9f2 | 3 | * |
okano | 1:b44f801ac9f2 | 4 | * @author Akifumi (Tedd) OKANO, NXP Semiconductors |
okano | 1:b44f801ac9f2 | 5 | * @version 0.1 |
okano | 1:b44f801ac9f2 | 6 | * @date 13-July-2021 |
okano | 1:b44f801ac9f2 | 7 | * |
okano | 1:b44f801ac9f2 | 8 | * SC18IS606 is an "I2C-bus to SPI bridge" |
okano | 1:b44f801ac9f2 | 9 | * http://www.nxp.com/ (product infomation page will be updated later) |
okano | 1:b44f801ac9f2 | 10 | */ |
okano | 1:b44f801ac9f2 | 11 | |
okano | 1:b44f801ac9f2 | 12 | #include "mbed.h" |
okano | 1:b44f801ac9f2 | 13 | #include "SC18IS606.h" |
okano | 1:b44f801ac9f2 | 14 | |
okano | 1:b44f801ac9f2 | 15 | SC18IS606::SC18IS606( PinName sda, PinName scl, char i2c_address ) |
okano | 1:b44f801ac9f2 | 16 | : i2c_p( new I2C( sda, scl ) ), i2c( *i2c_p ), device_address( i2c_address ) |
okano | 1:b44f801ac9f2 | 17 | { |
okano | 1:b44f801ac9f2 | 18 | init(); |
okano | 1:b44f801ac9f2 | 19 | } |
okano | 1:b44f801ac9f2 | 20 | |
okano | 1:b44f801ac9f2 | 21 | SC18IS606::SC18IS606( I2C &i2c_, char i2c_address ) |
okano | 1:b44f801ac9f2 | 22 | : i2c_p( NULL ), i2c( i2c_ ), device_address( i2c_address ) |
okano | 1:b44f801ac9f2 | 23 | { |
okano | 1:b44f801ac9f2 | 24 | init(); |
okano | 1:b44f801ac9f2 | 25 | } |
okano | 1:b44f801ac9f2 | 26 | |
okano | 1:b44f801ac9f2 | 27 | SC18IS606::~SC18IS606() |
okano | 1:b44f801ac9f2 | 28 | { |
okano | 1:b44f801ac9f2 | 29 | if ( NULL != i2c_p ) |
okano | 1:b44f801ac9f2 | 30 | delete i2c_p; |
okano | 1:b44f801ac9f2 | 31 | } |
okano | 1:b44f801ac9f2 | 32 | |
okano | 1:b44f801ac9f2 | 33 | int SC18IS606::init( void ) |
okano | 1:b44f801ac9f2 | 34 | { |
okano | 4:ac0aef91fd94 | 35 | wait_transfer_completion = NULL; |
okano | 4:ac0aef91fd94 | 36 | clear_interrupt(); |
okano | 4:ac0aef91fd94 | 37 | |
okano | 1:b44f801ac9f2 | 38 | return 0; // dummy |
okano | 1:b44f801ac9f2 | 39 | } |
okano | 1:b44f801ac9f2 | 40 | |
okano | 2:4e64923032ad | 41 | int SC18IS606::transfer( int slave_select_num, char *send_data_ptr, int length ) |
okano | 1:b44f801ac9f2 | 42 | { |
okano | 1:b44f801ac9f2 | 43 | char *p; |
okano | 1:b44f801ac9f2 | 44 | p = new char[ length + 1 ]; |
okano | 1:b44f801ac9f2 | 45 | |
okano | 2:4e64923032ad | 46 | *p = SPI_read_and_write | (0x1 << slave_select_num); |
okano | 1:b44f801ac9f2 | 47 | memcpy( p + 1, send_data_ptr, length ); |
okano | 1:b44f801ac9f2 | 48 | i2c.write( device_address, p, length + 1 ); |
okano | 1:b44f801ac9f2 | 49 | delete[] p; |
okano | 4:ac0aef91fd94 | 50 | |
okano | 4:ac0aef91fd94 | 51 | if ( NULL != wait_transfer_completion ) |
okano | 4:ac0aef91fd94 | 52 | (*wait_transfer_completion)(); |
okano | 2:4e64923032ad | 53 | |
okano | 2:4e64923032ad | 54 | return 0; // dummy |
okano | 2:4e64923032ad | 55 | } |
okano | 2:4e64923032ad | 56 | |
okano | 2:4e64923032ad | 57 | int SC18IS606::read_buffer( char *receive_data_ptr, int length ) |
okano | 2:4e64923032ad | 58 | { |
okano | 1:b44f801ac9f2 | 59 | if ( receive_data_ptr ) |
okano | 1:b44f801ac9f2 | 60 | i2c.read( device_address, receive_data_ptr, length ); |
okano | 1:b44f801ac9f2 | 61 | |
okano | 1:b44f801ac9f2 | 62 | return 0; // dummy |
okano | 1:b44f801ac9f2 | 63 | } |
okano | 1:b44f801ac9f2 | 64 | |
okano | 1:b44f801ac9f2 | 65 | int SC18IS606::config( FunctionID fid, char data ) |
okano | 1:b44f801ac9f2 | 66 | { |
okano | 1:b44f801ac9f2 | 67 | char s[ 2 ]; |
okano | 1:b44f801ac9f2 | 68 | s[ 0 ] = fid; |
okano | 1:b44f801ac9f2 | 69 | s[ 1 ] = data; |
okano | 1:b44f801ac9f2 | 70 | i2c.write( device_address, s, sizeof( s ) ); |
okano | 1:b44f801ac9f2 | 71 | |
okano | 1:b44f801ac9f2 | 72 | return 0; // dummy |
okano | 1:b44f801ac9f2 | 73 | } |
okano | 1:b44f801ac9f2 | 74 | |
okano | 1:b44f801ac9f2 | 75 | int SC18IS606::clear_interrupt( void ) |
okano | 1:b44f801ac9f2 | 76 | { |
okano | 1:b44f801ac9f2 | 77 | char c = Clear_Interrupt; |
okano | 1:b44f801ac9f2 | 78 | i2c.write( device_address, &c, sizeof( c ) ); |
okano | 1:b44f801ac9f2 | 79 | |
okano | 1:b44f801ac9f2 | 80 | return 0; // dummy |
okano | 1:b44f801ac9f2 | 81 | } |