打印

I2C 中断问题

[复制链接]
2506|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Qp91abc1234|  楼主 | 2013-2-9 14:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
当我发送起始位时,SI位置为,当发送从地址以及读写位时,SI不置位,求教
void I2C_Init(uint32 F_I2C)
{
PINSEL0 = (PINSEL0 & 0xfffff0f) | 0x50;
if(F_I2C > 400000)
  F_I2C = 40000;
I2SCLH = (Fpclk / F_I2C + 1) / 2;
I2SCLL = (Fpclk / F_I2C) / 2;
I2CONCLR = 0x2C;
I2CONSET = I2EN;
}
uint8 W_E2PROM(uint8 sla, uint8 slaveAddr, uint8 * pWriteData, uint8 num)
{
uint8 i;

I2CONCLR = AA | SI | STA;
I2CONSET = I2EN | STA;
while((I2CONSET & SI) == 0);
if(I2STAT != 0x08)
{
  I2CONSET = STO;
  return (I2STAT);
}

I2CONCLR = SI | STA;
I2DAT = sla & 0xfe;
while((I2CONSET & SI) == 0); //就是卡在这里执行不下去了,我看视频时有提到PLL设置,但设置了,还是不行,江湖救急,求教
if(I2STAT != 0x18)
{
  I2CONSET = STO;
  return (I2STAT);
}

I2CONCLR = SI;
I2DAT = slaveAddr;
while((I2CONSET & SI) == 0);

if(I2STAT != 0x28)
{
  I2CONSET = STO;
  return (I2STAT);
}

for(i = num; i > 0; i--)
{
  I2CONCLR = SI;
  I2DAT = *pWriteData++;
  while((I2CONSET & SI) == 0);
  if(I2STAT != 0x28)
  {
   I2CONSET = STO;
   return (I2STAT);
  }
}

I2CONCLR = SI;
I2CONSET = STO;
return (1);
}

相关帖子

沙发
阿南| | 2013-2-17 09:27 | 只看该作者
确定下SI位的具体功能,确认条件是否完全满足。

使用特权

评论回复
板凳
fjxw2000| | 2013-2-19 15:56 | 只看该作者
建议模拟吧!这个模块用不好很是头疼的

使用特权

评论回复
地板
airwill| | 2013-2-19 19:14 | 只看该作者
连什么芯片都不说, 上来没头没脑的一段代码, 谁弄得清楚咋回事呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝