📄 i2c.c
字号:
//=============================================================//文件名称:IIC.c//功能描述: IIC驱动//维护记录:// 2007.09.24 V1.0 by chengju <chengju@sunnorth.com.cn>//=============================================================#include "SPCE3200_Register.h"#include "SPCE3200_Constant.h"#include "I2C.h"//=============================================================// 语法格式: void IIC_Init(void);// 实现功能: IIC初始化// 参数: 无// 返回值: 无//=============================================================void I2C_Init(void){ *P_I2C_CLK_CONF = C_I2C_CLK_EN | C_I2C_RST_DIS; // I2C时钟模块使能 *P_I2C_INTERFACE_SEL |= C_I2C_PORT_SEL; // GPIO复用,选择I2C *P_I2C_RATE_SETUP = RATE; // 设置I2C的通信速率为27M/60 *P_I2C_SLAVE_ADDR = SLAVE_ADDR; // I2C从设备地址}//=============================================================// 语法格式: unsigned int i2c_read8(int addr);// 实现功能: 读一字节// 参数: 地址// 返回值: 读出的数据//=============================================================unsigned int I2C_Read8(int addr){ unsigned int a; *P_I2C_DATA_ADDR = addr; *P_I2C_MODE_CTRL = C_I2C_RX_MODE | C_I2C_8BIT_START; a = *P_I2C_INT_STATUS; while(a==0) // 等待读取 a = *P_I2C_INT_STATUS; *P_I2C_INT_STATUS = C_I2C_INT_FLAG; a = *P_I2C_MODE_CTRL & C_I2C_8BIT_ACK; // 发应答数据 a = *P_I2C_RX_DATA; return a;}//=============================================================// 语法格式: void i2c_write8(int addr, unsigned int value);// 实现功能: 写一字节// 参数: addr:要写入的地址;value:要写入的数据// 返回值: 无//=============================================================void I2C_Write8(int addr, unsigned int value){ unsigned int a; *P_I2C_DATA_ADDR = addr; *P_I2C_TX_DATA = value; *P_I2C_MODE_CTRL = C_I2C_TX_MODE| C_I2C_8BIT_START; a = *P_I2C_INT_STATUS; while(a==0) // 等待写入 a = *P_I2C_INT_STATUS; *P_I2C_INT_STATUS = C_I2C_INT_FLAG; a = *P_I2C_MODE_CTRL & C_I2C_8BIT_ACK; // 发应答数据}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -