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 |