使用示例

## 使用示例 ```language /** * @file i2c_demo.c * @ingroup peripheral * @brief I2C读写Demo * ***********************************************************************************/ #include "softap_api.h" #if DEMO_TEST #include "xy_peripheral.h" #define I2C_PRCM_CLK PRCM_CKG_CTL_I2C1 #define I2C_PORT I2C1 #define I2C_REMAP_SCK REMAP_I2C1_SCLK #define I2C_REMAP_SDA REMAP_I2C1_SDA #define I2C_SCK_PIN GPIO_PIN_NUM_18 #define I2C_SDA_PIN GPIO_PIN_NUM_19 #define I2C_TRANS_SPEED I2C_TRANS_SPEED_100K //100K or 400K #define I2C_TASK_PRIORITY 10 #define I2C_STACK_SIZE 500 UINT32 g_i2c_TskHandle; /** * @brief I2C中断处理函数,在这个中断函数内进行I2C的读写 * * @code * xy_I2C_WriteData(I2C_PORT, 0x48, &write, 1); xy_I2C_ReadData(I2C_PORT, 0x48, &read, 1); * @endcode * */ void user_hook_i2c_handler(void) { unsigned char read; unsigned char write = 0x43; xy_I2C_WriteData(I2C_PORT, 0x48, &write, 1); xy_I2C_ReadData(I2C_PORT, 0x48, &read, 1); xy_sleep(2); } /** * @brief I2C工作线程 * */ void i2c_work_task(void) { while(1) { user_hook_i2c_handler(); } } /** * @brief I2C初始化函数 * @note 在配置IO前需要清空配置寄存器并开启外设时钟 * * @code * xy_PRCM_ClockCmd(I2C_PRCM_CLK, ENABLE); xy_PRCM_ClockCmd(PRCM_CKG_CTL_GPIO, ENABLE); xy_GPIO_ClearConfig(I2C_SCK_PIN); xy_GPIO_ClearConfig(I2C_SDA_PIN); xy_GPIO_Remapping(I2C_SCK_PIN, I2C_REMAP_SCK); xy_GPIO_Remapping(I2C_SDA_PIN, I2C_REMAP_SDA); xy_GPIO_SetIOMode(I2C_SCK_PIN, GPIO_MODE_HW_PER); xy_GPIO_SetIOMode(I2C_SDA_PIN, GPIO_MODE_HW_PER); xy_I2C_Init(I2C_PORT, I2C_TRANS_SPEED); * * @endcode * */ void i2c_gpio_init(void) { xy_PRCM_ClockCmd(I2C_PRCM_CLK, ENABLE); xy_PRCM_ClockCmd(PRCM_CKG_CTL_GPIO, ENABLE); xy_GPIO_ClearConfig(I2C_SCK_PIN); xy_GPIO_ClearConfig(I2C_SDA_PIN); xy_GPIO_Remapping(I2C_SCK_PIN, I2C_REMAP_SCK); xy_GPIO_Remapping(I2C_SDA_PIN, I2C_REMAP_SDA); xy_GPIO_SetIOMode(I2C_SCK_PIN, GPIO_MODE_HW_PER); xy_GPIO_SetIOMode(I2C_SDA_PIN, GPIO_MODE_HW_PER); xy_I2C_Init(I2C_PORT, I2C_TRANS_SPEED); } /** * @brief 这个函数为I2Cdemo提供了一个工作线程 * * @return UINT32 */ UINT32 i2c_work_task_init(void) { UINT32 uwRet = LOS_NOK; uwRet = xy_TaskCreate((TaskFunc_t)i2c_work_task, "i2c_work_task", I2C_STACK_SIZE, NULL, I2C_TASK_PRIORITY, &g_i2c_TskHandle); return uwRet; } #endif ```