使用示例
## 使用示例
```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
```