📄 sys_iic.c.svn-base
字号:
/****************************************************************************
Copyright (c) 深圳市民德电子科技有限公司 http://www.szminde.cn
文件名称:sys_IIC.c
版本号: 1.0
日期: 2005-05-25
说明: 此文件包含对ES-TAD7100开发板上的IIC模块操作的函数。
调用列表:--
修改历史:--
****************************************************************************/
#include "44b.h"
#include "sys_IIC.h"
/*延时函数*/
extern void Delay(int time);
/****************************************************************************
函数名称:IIC_Init()
说明: 初始化指定的IIC模块。
调用函数:无
输入参数:无
输出参数:无
****************************************************************************/
void IIC_Init(void)
{
rIICCON=(0x1<<7)|(0x1<<6)|(0x1<<5)|0x1;
rIICADD=0x10;
rIICSTAT=0x10;
}
/****************************************************************************
函数名称:IIC_Write()
说明: 通过IIC总线向开发板上的EEPROM写一个字节的数据。
调用函数:无
输入参数:addr 要把数据写到EEPROM上的地址
data 要写的数据
输出参数:无
****************************************************************************/
void IIC_Write(U8 addr, U8 data)
{
S32 i;
/*主发送器模式,发送从地址,并开始*/
rIICDS=0xa0;
for(i=0;i<10;i++);
rIICSTAT=0xf0;
while((rIICCON&0x10)==0);
/*发送要写的地址*/
rIICDS=addr;
for(i=0;i<10;i++);
rIICCON=0xe1;
while((rIICCON&0x10)==0);
/*发送要写的数据*/
rIICDS=data;
for(i=0;i<10;i++);
rIICCON=0xe1;
while((rIICCON&0x10)==0);
/*结束*/
rIICSTAT=0xd0;
rIICCON=0xe1;
Delay(200);
/*POLLACK*/
while(1)
{
rIICDS=0xa0;
for(i=0;i<10;i++);
rIICSTAT=0xf0;
rIICCON=0xe1;
while((rIICCON&0x10)==0);
if((rIICSTAT&0x1)==0)
break;
}
rIICSTAT=0xd0;
rIICCON=0xe1;
Delay(200);
}
/****************************************************************************
函数名称:IIC_Read()
说明: 通过IIC总线读取开发板上的EEPROM里面一个字节的数据。
调用函数:无
输入参数:addr 要读取数据在EEPROM上的地址
输出参数:返回该数据
****************************************************************************/
U8 IIC_Read(U8 addr)
{
U8 data;
S32 i;
/*主发送器模式,发送从地址,并开始*/
rIICDS=0xa0;
for(i=0;i<10;i++);
rIICSTAT=0xf0;
while((rIICCON&0x10)==0);
/*发送要读取的地址*/
rIICDS=addr;
for(i=0;i<10;i++);
rIICCON=0xe1;
while((rIICCON&0x10)==0);
/*主接收器模式,发送从地址,并开始*/
rIICDS=0xa1;
for(i=0;i<10;i++);
rIICSTAT=0xb0;
rIICCON=0xe1;
while((rIICCON&0x10)==0);
/*读数据,第二次读到的才是需要的*/
data=rIICDS;
rIICCON=0x61;
while((rIICCON&0x10)==0);
data=rIICDS;
rIICSTAT=0x90;
rIICCON=0xe1;
Delay(200);
return data;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -