iic.c
来自「采用32位嵌入式芯片SPCE3200(凌阳)设计的开发板,具有多媒体功能。其中包」· C语言 代码 · 共 75 行
C
75 行
//=============================================================
//文件名称:IIC.c
//功能描述: IIC驱动
//维护记录: 2007-8-14 by liuxue modify
//=============================================================
#include "SPCE3200_Register.h"
#include "SPCE3200_Constant.h"
#include "IIC.h"
//=============================================================
// 语法格式: void IIC_Init(void);
// 实现功能: IIC初始化
// 参数: 无
// 返回值: 无
//=============================================================
void IIC_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 = 60; // 设置I2C的通信速率为27M/60
*P_I2C_SLAVE_ADDR = 0x42; // 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 + =
减小字号Ctrl + -
显示快捷键?