# 应用示例 ```c #include int i2c_master_example(void) { unsigned int bus_id = 0; // fornax 只有 1 路 unsigned char tx_data[5] ={1, 2, 3, 4, 5}; unsigned char rx_data[5] = {0}; unsigned chat data[10] = {0}, i; // 设置 i2c 为标准模式速度(100 kbit/s) gx_i2c_set_speed(0, 100); // 通过 i2c 往从机器件地址为 0x50,写入地址为 0x1234 写入 tx_data 数组中的 5 个字符 gx_i2c_tx(0, 0x50, 0x1234, 2, tx_data, 5); data[0] = 0x12; data[1] = 0x34; for (i = 0; i < 5; i++) data[2+i] = tx_data[i]; // 跟 gx_i2c_tx 一样的效果,但是内部不会申请内存,会更节约资源,以及自由控制大小端字节序 gx_i2c_write(0, 0x50, data, 7); // 通过 i2c 往从机器件地址为 0x50,地址为 0x1234 处读出 5 个字符到 rx_data 数组 gx_i2c_rx(0, 0x50, 0x1234, 2, rx_data, 5); data[0] = 0x12; data[1] = 0x34; // 同 gx_i2c_rx 效果 gx_i2c_read(0, 0x50, data, 2, rx_data, 5); /* 使能了 DMA 就是 DMA 模式,没有使能 DMA 就是中断模式 */ // 通过 i2c 往从机器件地址为 0x50,写入地址为 0x1234 写入 tx_data 数组中的 5 个字符 gx_i2c_async_tx(0, 0x50, 0x1234, 2, tx_data, 5); data[0] = 0x12; data[1] = 0x34; for (i = 0; i < 5; i++) data[2+i] = tx_data[i]; // 跟 gx_i2c_async_write 一样的效果,但是内部不会申请内存,会更节约资源,以及自由控制大小端字节序 gx_i2c_async_write(0, 0x50, 0x1234, 2, tx_data, 5); // 通过 i2c 往从机器件地址为 0x50,地址为 0x1234 处读出 5 个字符到 rx_data 数组 gx_i2c_async_rx(0, 0x50, 0x1234, 2, rx_data, 5); data[0] = 0x12; data[1] = 0x34; // 同 gx_i2c_async_rx 效果 gx_i2c_async_read(0, 0x50, data, 2, rx_data, 5); } ``` :::{note} gx_i2c_tx 函数内部会对传入的寄存器地址和数据进行整理排序,然后调用 gx_i2c_write,对资源紧张的方案可以直接调用 gx_i2c_write,其他函数类似。 :::