I2C Examples

Table of Contents

API-I2C-CASE1:I2C DMA MASTER MODE

Function Sub-Function APIs Description Update Status
irq_handler() None Interrupt handler function [Mandatory] 2019-1-10
main() cpu_wakeup_init() CPU initialization function [Mandatory]
clock_init() clock_init(SYS_CLK_24M_Crystal) Clock initialization function, System Clock is 24M RC by default [optional]
rf_drv_init() rf_drv_init(RF_MODE_BLE_1M) RF mode initialization [optional]
gpio_init() gpio_init(1) GPIO initialization: set the initialization status of all GPIOs [optional]
user_init() i2c_gpio_set() i2c_gpio_set(I2C_GPIO_GROUP_C0C1) Initialize i2c pin
i2c_master_init() i2c_master_init(0x5C, (unsigned char)(CLOCK_SYS_CLOCK_HZ/(4*I2C_CLK_SPEED)) ) Set the id of slave device and the speed of I2C interface
main_loop() i2c_write_series() i2c_write_series(SLAVE_DEVICE_ADDR, SLAVE_DEVICE_ADDR_LEN, (unsigned char *)i2c_tx_buff, BUFF_DATA_LEN) Write a packet of data to the specified address of slave device
i2c_read_series() i2c_read_series(SLAVE_DEVICE_ADDR, SLAVE_DEVICE_ADDR_LEN, (unsigned char *)i2c_rx_buff, BUFF_DATA_LEN) Read data from slave device
Variables above are defined as below

#define BUFF_DATA_LEN 16
#define SLAVE_DEVICE_ADDR 0x48000
#define SLAVE_DEVICE_ADDR_LEN 3
#define I2C_CLK_SPEED 200000
volatile unsigned char i2c_tx_buff[BUFF_DATA_LEN] = {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff};
volatile unsigned char i2c_rx_buff[BUFF_DATA_LEN] = {0};

API-I2C-CASE2:I2C DMA SLAVE MODE

Function Sub-Function APIs Description Update Status
irq_handler() if(reg_i2c_slave_irq_status & FLD_HOST_CMD_IRQ==FLD_HOST_CMD_IRQ) I2c interrupt status 2019-1-10
>reg_i2c_slave_irq_status Ι= FLD_HOST_CMD_IRQ clear irq status
>i2c_irq_cnt ++ Interrupt processing function
main() cpu_wakeup_init() CPU initialization function [Mandatory]
clock_init() clock_init(SYS_CLK_24M_Crystal) Clock initialization function, System Clock is 24M RC by default [optional]
rf_drv_init() rf_drv_init(RF_MODE_BLE_1M) RF mode initialization [optional]
gpio_init() gpio_init(1) GPIO initialization: set the initialization status of all GPIOs [optional]
user_init() i2c_gpio_set() i2c_gpio_set(I2C_GPIO_GROUP_C0C1) Initialize i2c pin
i2c_slave_init() i2c_slave_init(0x5C, I2C_SLAVE_DMA, NULL) Set the ID and mode of slave device
reg_irq_mask Ι= FLD_IRQ_MIX_CMD_EN I2c interrupt enable
main_loop() None Main program loop

Variables above are defined as below

unsigned char i2c_irq_cnt=0;

API-I2C-CASE3:I2C MAP MASTER MODE

Function Sub-Function APIs Description Update Status
irq_handler() none Interrupt handler function 2019-1-10
main() cpu_wakeup_init() CPU initialization function [Mandatory]
clock_init() clock_init(SYS_CLK_24M_Crystal) Clock initialization function, System Clock is 24M RC by default [optional]
rf_drv_init() rf_drv_init(RF_MODE_BLE_1M) RF mode initialization [optional]
gpio_init() gpio_init(1) GPIO initialization: set the initialization status of all GPIOs [optional]
user_init() i2c_gpio_set() i2c_gpio_set(I2C_GPIO_GROUP_C0C1) Initialize i2c pin
i2c_master_init() i2c_master_init(0x5C, (unsigned char)(CLOCK_SYS_CLOCK_HZ/(4*I2C_CLK_SPEED)) ) Set the id of slave device and the speed of I2C interface
main_loop() i2c_write_series() i2c_write_series(0,0,(unsigned char*)i2c_tx_buff, BUFF_DATA_LEN) Write a packet of data to slave device working in mapping mode
i2c_read_series() i2c_read_series(0,0,(unsigned char*)i2c_rx_buff, BUFF_DATA_LEN) Read a packet of data from slave device working in mapping mode

Variables above are defined as below

#define BUFF_DATA_LEN 64
#define I2C_CLK_SPEED 200000
volatile unsigned char i2c_tx_buff[BUFF_DATA_LEN] = {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff};
volatile unsigned char i2c_rx_buff[BUFF_DATA_LEN] = {0};

API-I2C-CASE4:I2C MAP SLAVE MODE

Function Sub-Function APIs Description Update Status
irq_handler() if(reg_i2c_slave_irq_status & FLD_HOST_CMD_IRQ ==FLD_HOST_CMD_IRQ) I2c interrupt status 2019-1-10
>reg_i2c_slave_irq_status Ι= FLD_HOST_CMD_IRQ clear irq status
>i2c_irq_cnt ++ Interrupt processing function
main() cpu_wakeup_init() CPU initialization function [Mandatory]
clock_init() clock_init(SYS_CLK_24M_Crystal) Clock initialization function, System Clock is 24M RC by default [optional]
rf_drv_init() rf_drv_init(RF_MODE_BLE_1M) RF mode initialization [optional]
gpio_init() gpio_init(1) GPIO initialization: set the initialization status of all GPIOs [optional]
user_init() i2c_gpio_set() i2c_gpio_set(I2C_GPIO_GROUP_C0C1) Initialize i2c pin
i2c_slave_init() i2c_slave_init(0x5C, I2C_SLAVE_MAP, (unsigned char *)i2c_slave_mapping_buff+64) Set the ID and mode of slave device
reg_irq_mask Ι= FLD_IRQ_MIX_CMD_EN I2c interrupt enable
main_loop() None Main program loop

Variables above are defined as below

__attribute__((aligned(128))) unsigned char i2c_slave_mapping_buff[128] = {0};
unsigned char i2c_irq_cnt=0;

History Record

Date Description Author
2019-1-10 initial release SP/LJW