📄 i2c.c
字号:
/****************************************Copyright (c)**************************************************
** 上海新时达电气有限公司
** 研 发 中 心
** 研发一部
**
** http://www.stepelevatar.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: I2C.c
**创 建 人: 吕海安
**最后修改日期: 2007年01月10日
**描 述: I2C的底层函数
**注 意: IIC属于共享资源,所以使用了一个互斥信号量,每一个互斥信号量需要一个优先
** 等级,因此需要空闲一个任务优先级给IIC资源。
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 吕海安
** 版 本: v1.0
** 日 期: 2007年01月10日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 吕海安
** 日 期: 2007年07月04
** 描 述: For MP3 语音报站器
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "config.h"
void InitI2CGPIO(void)
{
// Init I2C1 for LPC2134
// PINSEL0 = (PINSEL0 & (~(0x03 << 22))) | (0x03 << 22) |
// (PINSEL0 & (~(0x03 << 28))) | (0x03 << 28);
// Init I2C1 for LPC2119
PINSEL0 = (PINSEL0 & (~(0x03 << 4))) | (0x01 << 4) |
(PINSEL0 & (~(0x3 << 6))) | (0x01 << 6);
}
void InitI2c(INT8U Baud)
{
// FM24CL64 最高支持 1MHz; 使用 750 KHz; RTC PCF8563T 最高支持 400 KHz; 使用 300 KHz
if (Baud) // 800KHz
{
I2C0SCLH = 20;
I2C0SCLL = 20;
}
else // 300 KHz
{
I2C0SCLH = 50;
I2C0SCLL = 50;
}
}
void StartI2C(void)
{
I2C0CONCLR = 0xff;
I2C0CONSET = 0x40;
I2C0CONSET = 0x60;
while ((I2C0CONSET & 0x08) == 0); //等待SI为1
}
void SendByte(INT8U ch)
{
I2C0DAT = ch;
I2C0CONCLR = 0x28; // 清除标志位STA,SI
while ((I2C0CONSET & 0x08) == 0); //等待SI为1
}
INT32U RcvByteNA(void)
{
I2C0CONCLR = 0xc; // 清除标志位AA,SI
while ((I2C0CONSET & 0x08) == 0); //等待SI为1
return (I2C0DAT);
}
INT32U RcvByteA(void)
{
I2C0CONCLR = 0x8; // 清除标志位 SI
I2C0CONSET = 0x4; // 置位AA,即发送应答位.
while ((I2C0CONSET & 0x08) == 0); //等待SI为1
return (I2C0DAT);
}
void wait(void)
{
INT32U i;
for (i = 0; i < 20000; i++);
}
void StopI2C(void)
{
I2C0CONCLR = 0x28; // 清除标志位STA,SI
I2C0CONSET = 0x50; // 发送结束总线信号
wait();
}
/*********************************************************************************************************
** End Of File
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -