Contiki-NG
Files

cc2538 I2C Control Module More...

Files

file  i2c.c
 Implementation file of the I2C Control module.
 
file  i2c.h
 Header file with declarations for the I2C Control module.
 

I2C Master commands

#define I2C_MASTER_CMD_SINGLE_SEND   0x00000007
 
#define I2C_MASTER_CMD_SINGLE_RECEIVE   0x00000007
 
#define I2C_MASTER_CMD_BURST_SEND_START   0x00000003
 
#define I2C_MASTER_CMD_BURST_SEND_CONT   0x00000001
 
#define I2C_MASTER_CMD_BURST_SEND_FINISH   0x00000005
 
#define I2C_MASTER_CMD_BURST_SEND_ERROR_STOP   0x00000004
 
#define I2C_MASTER_CMD_BURST_RECEIVE_START   0x0000000b
 
#define I2C_MASTER_CMD_BURST_RECEIVE_CONT   0x00000009
 
#define I2C_MASTER_CMD_BURST_RECEIVE_FINISH   0x00000005
 
#define I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP   0x00000004
 

I2C Master status flags

#define I2C_MASTER_ERR_NONE   0
 
#define I2CM_STAT_BUSY   0x00000001
 
#define I2CM_STAT_ERROR   0x00000002
 
#define I2CM_STAT_ADRACK   0x00000004
 
#define I2CM_STAT_DATACK   0x00000008
 
#define I2CM_STAT_ARBLST   0x00000010
 
#define I2CM_STAT_IDLE   0x00000020
 
#define I2CM_STAT_BUSBSY   0x00000040
 
#define I2CM_STAT_INVALID   0x00000080
 

I2C registers

#define I2CM_CR   0x40020020 /* I2C master config */
 
#define I2CM_TPR   0x4002000C /* I2C master timer period */
 
#define I2CM_SA   0x40020000 /* I2C master slave address */
 
#define I2CM_DR   0x40020008 /* I2C master data */
 
#define I2CM_CTRL   0x40020004 /* Master control in write */
 
#define I2CM_STAT   I2CM_CTRL /* Master status in read */
 

I2C Miscellaneous

#define I2C_SCL_NORMAL_BUS_SPEED   100000 /* 100KHz I2C */
 
#define I2C_SCL_FAST_BUS_SPEED   400000 /* 400KHz I2C */
 
#define I2C_RECEIVE   0x01 /* Master receive */
 
#define I2C_SEND   0x00 /* Master send */
 

I2C Functions

void i2c_init (uint8_t port_sda, uint8_t pin_sda, uint8_t port_scl, uint8_t pin_scl, uint32_t bus_speed)
 Initialize the I2C peripheral and pins. More...
 
void i2c_master_enable (void)
 Enable master I2C module.
 
void i2c_master_disable (void)
 Disable master I2C module.
 
void i2c_set_frequency (uint32_t freq)
 Initialize I2C peripheral clock with given frequency. More...
 
void i2c_master_set_slave_address (uint8_t slave_addr, uint8_t access_mode)
 Set the address of slave and access mode for the next I2C communication. More...
 
void i2c_master_data_put (uint8_t data)
 Prepare data to be transmitted. More...
 
uint8_t i2c_master_data_get (void)
 Return received data from I2C. More...
 
void i2c_master_command (uint8_t cmd)
 Control the state of the master module for send and receive operations. More...
 
uint8_t i2c_master_busy (void)
 Return the busy state of I2C module. More...
 
uint8_t i2c_master_error (void)
 Return the status register if error occurred during last communication. More...
 
uint8_t i2c_single_send (uint8_t slave_addr, uint8_t data)
 Perform all operations to send a byte to a slave. More...
 
uint8_t i2c_single_receive (uint8_t slave_addr, uint8_t *data)
 Perform all operations to receive a byte from a slave. More...
 
uint8_t i2c_burst_send (uint8_t slave_addr, uint8_t *data, uint8_t len)
 Perform all operations to send multiple bytes to a slave. More...
 
uint8_t i2c_burst_receive (uint8_t slave_addr, uint8_t *data, uint8_t len)
 Perform all operations to receive multiple bytes from a slave. More...
 

Detailed Description

cc2538 I2C Control Module

Function Documentation

◆ i2c_burst_receive()

uint8_t i2c_burst_receive ( uint8_t  slave_addr,
uint8_t *  data,
uint8_t  len 
)

Perform all operations to receive multiple bytes from a slave.

Parameters
slave_addrThe address of the slave from which data are received
dataA pointer to store the received data
lenNumber of bytes to receive
Returns
Return the value of i2c_master_error() after the I2C operation

Definition at line 218 of file i2c.c.

◆ i2c_burst_send()

uint8_t i2c_burst_send ( uint8_t  slave_addr,
uint8_t *  data,
uint8_t  len 
)

Perform all operations to send multiple bytes to a slave.

Parameters
slave_addrThe address of the slave to which data are sent
dataA pointer to the data to send to the slave
lenNumber of bytes to send
Returns
Return the value of i2c_master_error() after the I2C operation

Definition at line 188 of file i2c.c.

◆ i2c_init()

void i2c_init ( uint8_t  port_sda,
uint8_t  pin_sda,
uint8_t  port_scl,
uint8_t  pin_scl,
uint32_t  bus_speed 
)

Initialize the I2C peripheral and pins.

Parameters
port_sdaThe GPIO number of the pin used fort SDA
pin_sdaThe pin number used for SDA
port_sclThe GPIO number of the pin used fort SCL
pin_sclThe pin number used for SCL
bus_speedThe clock frequency used by I2C module

bus_speed can take the following values:

  • I2C_SCL_NORMAL_BUS_SPEED : 100KHz
  • I2C_SCL_FAST_BUS_SPEED : 400KHz

Definition at line 49 of file i2c.c.

Referenced by platform_init_stage_two(), rtcc_init(), and tmp102_init().

◆ i2c_master_busy()

uint8_t i2c_master_busy ( void  )

Return the busy state of I2C module.

Return values
0The I2C module is not busy
1The I2C module is busy

Definition at line 141 of file i2c.c.

◆ i2c_master_command()

void i2c_master_command ( uint8_t  cmd)

Control the state of the master module for send and receive operations.

Parameters
cmdThe operation to perform

cmd can take the following values:

  • I2C_MASTER_CMD_SINGLE_SEND
  • I2C_MASTER_CMD_SINGLE_RECEIVE
  • I2C_MASTER_CMD_BURST_SEND_START
  • I2C_MASTER_CMD_BURST_SEND_CONT
  • I2C_MASTER_CMD_BURST_SEND_FINISH
  • I2C_MASTER_CMD_BURST_SEND_ERROR_STOP
  • I2C_MASTER_CMD_BURST_RECEIVE_START
  • I2C_MASTER_CMD_BURST_RECEIVE_CONT
  • I2C_MASTER_CMD_BURST_RECEIVE_FINISH
  • I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP

Definition at line 133 of file i2c.c.

◆ i2c_master_data_get()

uint8_t i2c_master_data_get ( void  )

Return received data from I2C.

Returns
The byte received by I2C after à receive command

Definition at line 127 of file i2c.c.

◆ i2c_master_data_put()

void i2c_master_data_put ( uint8_t  data)

Prepare data to be transmitted.

Parameters
dataThe byte of data to be transmitted from the I2C master

Definition at line 121 of file i2c.c.

◆ i2c_master_error()

uint8_t i2c_master_error ( void  )

Return the status register if error occurred during last communication.

Return values
I2C_MASTER_ERR_NONEReturn 0 if no error occurred

If an error occurred, return the status register of the I2C module. Use the result with the I2CM_STAT_* flags to custom your processing

Definition at line 147 of file i2c.c.

◆ i2c_master_set_slave_address()

void i2c_master_set_slave_address ( uint8_t  slave_addr,
uint8_t  access_mode 
)

Set the address of slave and access mode for the next I2C communication.

Parameters
slave_addrThe receiver slave address on 7 bits
access_modeThe I2C access mode (send/receive)

access_mode can take the following values:

  • I2C_RECEIVE : 1
  • I2C_SEND : 0

Definition at line 111 of file i2c.c.

◆ i2c_set_frequency()

void i2c_set_frequency ( uint32_t  freq)

Initialize I2C peripheral clock with given frequency.

Parameters
freqThe desired frequency

freq can take the following values:

  • I2C_SCL_NORMAL_BUS_SPEED : 100KHz
  • I2C_SCL_FAST_BUS_SPEED : 400KHz

Definition at line 103 of file i2c.c.

◆ i2c_single_receive()

uint8_t i2c_single_receive ( uint8_t  slave_addr,
uint8_t *  data 
)

Perform all operations to receive a byte from a slave.

Parameters
slave_addrThe address of the slave from which data are received
dataA pointer to store the received data
Returns
Return the value of i2c_master_error() after the I2C operation

Definition at line 172 of file i2c.c.

◆ i2c_single_send()

uint8_t i2c_single_send ( uint8_t  slave_addr,
uint8_t  data 
)

Perform all operations to send a byte to a slave.

Parameters
slave_addrThe adress of the slave to which data are sent
dataThe data to send to the slave
Returns
Return the value of i2c_master_error() after the I2C operation

Definition at line 159 of file i2c.c.