HAL  v0.6.1
Hardware Abstraction Layer
Loading...
Searching...
No Matches
I2C

Inter-integrated Circuit. More...

Collaboration diagram for I2C:

Data Structures

struct  i2c_channel_attr_t
 
struct  i2c_handle_t
 

Enumerations

enum  i2c_result_t {
  I2C_RESULT_OK ,
  I2C_RESULT_INVALID ,
  I2C_RESULT_UNSUPPORTED ,
  I2C_RESULT_BIT_ERROR ,
  I2C_RESULT_TIMEOUT ,
  I2C_RESULT_IDLE ,
  I2C_RESULT_BUSY ,
  I2C_RESULT_NAK ,
  I2C_RESULT_ERR ,
  TOTAL_I2C_RESULT
}
 
enum  i2c_status_t {
  I2C_STATUS_UNKNOWN ,
  I2C_STATUS_OK ,
  I2C_STATUS_BUSY ,
  I2C_STATUS_STOP ,
  I2C_STATUS_SENDING ,
  I2C_STATUS_RECEIVING ,
  I2C_STATUS_ERR ,
  TOTAL_I2C_STATUS
}
 
enum  i2c_mode_t {
  I2C_MODE_MASTER ,
  I2C_MODE_SLAVE ,
  TOTAL_I2C_MODE
}
 
enum  i2c_baudrate_t {
  I2C_BAUDRATE_100KHZ = 100000U ,
  I2C_BAUDRATE_400KHZ = 400000U ,
  I2C_BAUDRATE_1MHZ = 1000000U ,
  I2C_BAUDRATE_3_4MHZ = 3400000U ,
  TOTAL_I2C_BAUDRATE
}
 

Functions

i2c_result_t hal_i2c_init (i2c_handle_t *handle, const i2c_channel_attr_t attr)
 Configure I2C channel with specific attributes.
 
i2c_result_t hal_i2c_write (i2c_handle_t *handle, const uint16_t address, const uint32_t reg_addr, const size_t reg_len, const uint8_t *tx_buffer, const size_t len)
 Write data to specific device address.
 
i2c_result_t hal_i2c_read (i2c_handle_t *handle, const uint16_t address, const uint32_t reg_addr, const size_t reg_len, uint8_t *rx_buffer, const size_t len)
 Read data from specific device address.
 
i2c_result_t hal_i2c_stop (i2c_handle_t *handle)
 Stop I2C operation.
 
i2c_result_t hal_i2c_mutex_take (const uint8_t channel, const uint32_t timeout_ms)
 Try acquire RTOS mutex for specified channel.
 
i2c_result_t hal_i2c_mutex_give (const uint8_t channel)
 Release RTOS mutex for specified channel.
 

Detailed Description

Inter-integrated Circuit.

Enumeration Type Documentation

◆ i2c_baudrate_t

#include <i2c/public_inc/hal_i2c.h>

Enumerator
I2C_BAUDRATE_100KHZ 
I2C_BAUDRATE_400KHZ 
I2C_BAUDRATE_1MHZ 
I2C_BAUDRATE_3_4MHZ 
TOTAL_I2C_BAUDRATE 

◆ i2c_mode_t

enum i2c_mode_t

#include <i2c/public_inc/hal_i2c.h>

Enumerator
I2C_MODE_MASTER 
I2C_MODE_SLAVE 
TOTAL_I2C_MODE 

◆ i2c_result_t

#include <i2c/public_inc/hal_i2c.h>

Enumerator
I2C_RESULT_OK 

No error.

I2C_RESULT_INVALID 

Operation invalid.

I2C_RESULT_UNSUPPORTED 

Operation not supported.

I2C_RESULT_BIT_ERROR 

Data bit error.

I2C_RESULT_TIMEOUT 

Transmission timeout.

I2C_RESULT_IDLE 

Bus idle.

I2C_RESULT_BUSY 

Bus busy.

I2C_RESULT_NAK 

Receive device not acknowledge.

I2C_RESULT_ERR 

Error occurred.

TOTAL_I2C_RESULT 

◆ i2c_status_t

#include <i2c/public_inc/hal_i2c.h>

Enumerator
I2C_STATUS_UNKNOWN 

Unknown bus status.

I2C_STATUS_OK 

No error.

I2C_STATUS_BUSY 

Bus busy.

I2C_STATUS_STOP 

Channel stopped.

I2C_STATUS_SENDING 

Channel sending.

I2C_STATUS_RECEIVING 

Channel receiving.

I2C_STATUS_ERR 

Error occured.

TOTAL_I2C_STATUS 

Function Documentation

◆ hal_i2c_init()

i2c_result_t hal_i2c_init ( i2c_handle_t * handle,
const i2c_channel_attr_t attr )

#include <i2c/public_inc/hal_i2c.h>

Configure I2C channel with specific attributes.

i2c_handle_t handle = {
.channel = BSP_I2C_CHANNEL_1
};
.sda_pin = 10U,
.scl_pin = 11U,
.baudrate = 100000U,
.low_power_enable = false
};
i2c_result_t result = hal_i2c_init( &handle, attr );
i2c_result_t hal_i2c_init(i2c_handle_t *handle, const i2c_channel_attr_t attr)
Configure I2C channel with specific attributes.
i2c_result_t
Definition hal_i2c.h:39
@ I2C_MODE_MASTER
Definition hal_i2c.h:67
Definition hal_i2c.h:84
gpio_pin_t sda_pin
Definition hal_i2c.h:85
Definition hal_i2c.h:93
i2c_mode_t mode
Definition hal_i2c.h:94
Parameters
[in,out]handleI2C handler
[in]attrI2C channel attributes
Return values
I2C_RESULT_OKSuccess configure I2C channel
I2C_RESULT_INVALIDConfiguration attributes invalid
I2C_RESULT_UNSUPPORTEDOperation not supported
I2C_RESULT_ERRFailed configure I2C channel

◆ hal_i2c_mutex_give()

i2c_result_t hal_i2c_mutex_give ( const uint8_t channel)

#include <i2c/public_inc/hal_i2c.h>

Release RTOS mutex for specified channel.

i2c_result_t result = hal_i2c_mutex_give( BSP_I2C_CHANNEL_1 );
i2c_result_t hal_i2c_mutex_give(const uint8_t channel)
Release RTOS mutex for specified channel.
Parameters
[in]channelI2C channel's mutex to be released
Return values
I2C_RESULT_OKSuccess release mutex
I2C_RESULT_INVALIDInvalid channel
I2C_RESULT_UNSUPPORTEDOperation not supported
I2C_RESULT_ERRFailed release mutex

◆ hal_i2c_mutex_take()

i2c_result_t hal_i2c_mutex_take ( const uint8_t channel,
const uint32_t timeout_ms )

#include <i2c/public_inc/hal_i2c.h>

Try acquire RTOS mutex for specified channel.

i2c_result_t result = hal_i2c_mutex_take( BSP_I2C_CHANNEL_1, 10U );
i2c_result_t hal_i2c_mutex_take(const uint8_t channel, const uint32_t timeout_ms)
Try acquire RTOS mutex for specified channel.
Parameters
[in]channelI2C channel's mutex to be locked
[in]timeout_msMutex acquiring timeout in milliseconds
Return values
I2C_RESULT_OKSuccess acquire mutex
I2C_RESULT_INVALIDInvalid channel
I2C_RESULT_UNSUPPORTEDOperation not supported
I2C_RESULT_ERRFailed acquire mutex

◆ hal_i2c_read()

i2c_result_t hal_i2c_read ( i2c_handle_t * handle,
const uint16_t address,
const uint32_t reg_addr,
const size_t reg_len,
uint8_t * rx_buffer,
const size_t len )

#include <i2c/public_inc/hal_i2c.h>

Read data from specific device address.

uint8_t addr = 0x1U;
uint8_t reg_addr = 0xFU;
size_t reg_len = sizeof( reg_addr );
uint8_t rx_buffer[3U] = { 0U };
i2c_result_t result = hal_i2c_read( &handle,
addr,
reg_addr,
reg_len,
rx_buffer,
sizeof( rx_buffer ) );
i2c_result_t hal_i2c_read(i2c_handle_t *handle, const uint16_t address, const uint32_t reg_addr, const size_t reg_len, uint8_t *rx_buffer, const size_t len)
Read data from specific device address.
Parameters
[in,out]handleI2C handler
[in]addressDevice address
[in]reg_addrRegister address
[in]reg_lenRegister byte size
[out]rx_bufferReceiving buffer
[in]lenBuffer size
Return values
I2C_RESULT_OKSuccess read data from I2C bus
I2C_RESULT_TIMEOUTRead data from I2C bus timeout
I2C_RESULT_BUSYNetwork busy
I2C_RESULT_ERRFailed read data from I2C bus

◆ hal_i2c_stop()

i2c_result_t hal_i2c_stop ( i2c_handle_t * handle)

#include <i2c/public_inc/hal_i2c.h>

Stop I2C operation.

i2c_result_t result = hal_i2c_stop( &handle );
i2c_result_t hal_i2c_stop(i2c_handle_t *handle)
Stop I2C operation.
Parameters
[in,out]handleI2C handler
Return values
I2C_RESULT_OKSuccess stop I2C transaction
I2C_RESULT_UNSUPPORTEDOperation not supported
I2C_RESULT_ERRFailed stop I2C transaction

◆ hal_i2c_write()

i2c_result_t hal_i2c_write ( i2c_handle_t * handle,
const uint16_t address,
const uint32_t reg_addr,
const size_t reg_len,
const uint8_t * tx_buffer,
const size_t len )

#include <i2c/public_inc/hal_i2c.h>

Write data to specific device address.

uint8_t addr = 0x1U;
uint8_t reg_addr = 0xFU;
size_t reg_len = sizeof( reg_addr );
uint8_t tx_buffer[] = { 10U, 20U, 30U };
i2c_result_t result = hal_i2c_write( &handle,
addr,
reg_addr,
reg_len,
tx_buffer,
sizeof( tx_buffer ) );
i2c_result_t hal_i2c_write(i2c_handle_t *handle, const uint16_t address, const uint32_t reg_addr, const size_t reg_len, const uint8_t *tx_buffer, const size_t len)
Write data to specific device address.
Parameters
[in,out]handleI2C handler
[in]addressDevice address
[in]reg_addrRegister address
[in]reg_lenRegister byte size
[in]tx_bufferBuffer to be transmitted
[in]lenBuffer size
Return values
I2C_RESULT_OKSuccess write data to I2C bus
I2C_RESULT_TIMEOUTWrite to I2C bus timeout
I2C_RESULT_BUSYNetwork busy
I2C_RESULT_ERRFailed write data to I2C bus