主题 : 如何通过IIC读写EEPROM的问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 2525
精华: 0
发帖: 8
金钱: 50 两
威望: 10 点
综合积分: 16 分
注册时间: 2008-11-22
最后登录: 2017-09-13
楼主  发表于: 2011-01-21 13:54

 如何通过IIC读写EEPROM的问题

写了设备地址0XA6后产生了中断,在中断处理函数中读取IICSTAT发现第0位为1(ACK was not received),为什么没有ACK?

volatile int i;

//第2步调用
static void byte_writ_eeprom(char* argv[])
{
  //我们写的逻辑目标地址为1023字节
  i=0;
  rIICDS=0xA6;
  rIICSTAT=0xF0;
}

//第3步产生中断
void IIC_Isr(void)
{
  if(1/*byte_writ_eeprom*/)
  {
    if(i==0)
    {
      rIICDS=0xFF;//逻辑地址的第二部分
      i++;
    }
    else if(i==1)
    {
      rIICDS=0xAB;//要写的数据
      i++;
    }
    else
    {
      rIICSTAT=0xD0;
    }
    printk("IIC_Isr\n");
    ClearPendingInterrupt(BIT_INT_IIC);
  }
}

//第1步调用
void InitIIC(void)
{
g_InterruptServiceTable[OFFSET_INT_IIC]=IIC_Isr;
rINTMSK &= ~BIT_INT_IIC;

//配置SCL、允许中断和ACK
rIICCON=(1<<7)|(1<<6)|(1<<5/*interrupt enable*/)|(10<<0);

AddCmd("bweeprom",0,byte_writ_eeprom);
}