📄 vi2c_lm3s101.c
字号:
}
delay(18);
HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SCL << 2))) = SCL;
delay(30); //时钟低电平周期大于4μs
HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SCL << 2))) = ~SCL; //清时钟线,钳住I2C总线以便继续接收
delay(12);
}
/*******************************************************************
/*******************************************************************
用户接口函数
*******************************************************************/
/*******************************************************************
向无子地址器件发送字节数据函数
函数原型: int ISendByte(uchar sla,uchar c);
功能: 从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
如果返回1表示操作成功,否则操作有误。
注意: 使用前必须已结束总线。
********************************************************************/
int ISendByte(uchar sla,uchar c)
{
Start_I2c(); //启动总线
SendByte(sla); //发送器件地址
if(ack==0)
return(0);
SendByte(c); //发送数据
if(ack==0)
return(0);
Stop_I2c(); //结束总线
return(1);
}
/*******************************************************************
/*******************************************************************
向有子地址器件发送多字节数据函数
函数原型: int ISendStr(uchar sla,uchar suba,uchar *s,uchar no);
功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
如果返回1表示操作成功,否则操作有误。
注意: 使用前必须已结束总线。
********************************************************************/
int ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
{
uchar i;
Start_I2c(); //启动总线
SendByte(sla); //发送器件地址
if(ack==0)
return(0);
SendByte(suba); //发送器件子地址
if(ack==0)
return(0);
for(i=0;i<no;i++)
{
SendByte(*s); //发送数据
if(ack==0)
return(0);
s++;
}
Stop_I2c(); //结束总线
return(1);
}
/*******************************************************************
/*******************************************************************
向无子地址器件发送多字节数据函数
函数原型: int ISendStrExt(uchar sla,uchar *s,uchar no);
功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
地址sla,发送内容是s指向的内容,发送no个字节。
如果返回1表示操作成功,否则操作有误。
注意: 使用前必须已结束总线。
********************************************************************/
int ISendStrExt(uchar sla,uchar *s,uchar no)
{
uchar i;
Start_I2c(); //启动总线
SendByte(sla); //发送器件地址
if(ack==0)
return(0);
for(i=0;i<no;i++)
{
SendByte(*s); //发送数据
if(ack==0)
return(0);
s++;
}
Stop_I2c(); //结束总线
return(1);
}
/*******************************************************************
/*******************************************************************
向无子地址器件读取一字节数据函数
函数原型: int IRcvByte(uchar sla,ucahr *c);
功能: 从启动总线到发送地址,读数据,结束总线的全过程,从器件地
址sla,返回值在c.
如果返回1表示操作成功,否则操作有误。
注意: 使用前必须已结束总线。
********************************************************************/
int IRcvByte(uchar sla,uchar *c)
{
Start_I2c(); //启动总线
SendByte(sla+1); //发送器件地址
if(ack==0)
return(0);
*c=RcvByte(); //接收数据
Ack_I2c(1); //接收完,发送非应答位,结束总线
Stop_I2c(); //结束总线
return(1);
}
/*******************************************************************
/*******************************************************************
向有子地址器件读取多字节数据函数
函数原型: int ISendStr(uchar sla,uchar suba,uchar *s,uchar no);
功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
如果返回1表示操作成功,否则操作有误。
注意: 使用前必须已结束总线。
********************************************************************/
int IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
{
uchar i;
Start_I2c(); //启动总线
SendByte(sla); //发送器件地址
if(ack==0)
return(0);
SendByte(suba); //发送器件子地址
if(ack==0)
return(0);
Start_I2c(); //重新启动总线
SendByte(sla+1);
if(ack==0)
return(0);
for(i=0;i<no-1;i++) //先接收前(no-1)字节
{
*s=RcvByte(); //接收数据
Ack_I2c(0); //还未接收完,发送应答位
s++;
}
*s=RcvByte(); //接收第no字节
Ack_I2c(1); //接收完,发送非应答位
Stop_I2c(); //结束总线
return(1);
}
/*******************************************************************
/*******************************************************************
向无子地址器件读取多字节数据函数
函数原型: int ISendStrExt(uchar sla,uchar *s,uchar no);
功能: 从启动总线到发送地址,读数据,结束总线的全过程.
从器件地址sla,读出的内容放入s指向的存储区,
读no个字节。如果返回1表示操作成功,否则操作有误。
注意: 使用前必须已结束总线。
********************************************************************/
int IRcvStrExt(uchar sla,uchar *s,uchar no)
{
uchar i;
Start_I2c();
SendByte(sla+1); //R/W选择位,为1时为读, 为0 时为写
if(ack==0)return(0);
for(i=0;i<no-1;i++) //先接收前(no-1)个字节
{
*s=RcvByte(); //接收数据
Ack_I2c(0); //未读取完,发送应答位
s++;
}
*s=RcvByte(); //接收第no字节
Ack_I2c(1); //接收完,发送非应答位
Stop_I2c(); //结束总线
return(1);
}
//*******************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -