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 + -
显示快捷键?