请问28335的I2C模块,在与从器件连接时,会从SCL引脚输出时钟信号么?

[复制链接]
4264|24
 楼主| thelust 发表于 2014-9-9 11:06 | 显示全部楼层 |阅读模式
我用开发板给的EEPROM的例程,可是在SCL引脚检测不到时钟信号
wangch_sh 发表于 2014-9-9 11:19 | 显示全部楼层
应该会的,肯定哪儿出问题了
siyida 发表于 2014-9-9 15:12 | 显示全部楼层
SCL信号必须在CS 之后
 楼主| thelust 发表于 2014-9-9 15:23 | 显示全部楼层
那请大神帮忙看一下,这是开发板给的配套例程,存在什么问题呢
#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File

void InitI2C(void);
Uint16         ReadData(Uint16  *RamAddr, Uint16 RomAddress, Uint16 number);
Uint16         WriteData(Uint16 *Wdata, Uint16 RomAddress, Uint16 number);

Uint16        I2C_xrdy();
Uint16        I2C_rrdy();

Uint16  i;


        Uint16   dat1[8]={0,0,0,0,0,0,0,0};
        Uint16   dat[]={ 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88};
        
void main(void)
{
   InitSysCtrl();
// InitGpio();  // Skipped for this example
   InitXintf16Gpio();
   InitI2CGpio();
   InitI2C();
   DINT;
   InitPieCtrl();
   IER = 0x0000;
   IFR = 0x0000;
//LedReg = 0xFF;

   WriteData(dat,0x60,8);
   DELAY_US(10000);
   ReadData(dat1,0x60,8);

   for(; ;)
   {

   }

}





Uint16 WriteData(Uint16        *Wdata, Uint16        RomAddress, Uint16 number)
{
   Uint16 i;
   if (I2caRegs.I2CSTR.bit.BB == 1)
   {
      return I2C_BUS_BUSY_ERROR;
   }
   while(!I2C_xrdy());
   I2caRegs.I2CSAR = 0x50;
   I2caRegs.I2CCNT = number + 1;
   I2caRegs.I2CDXR = RomAddress;
   I2caRegs.I2CMDR.all = 0x6E20;
   for (i=0; i<number; i++)
   {
      while(!I2C_xrdy());
      I2caRegs.I2CDXR = *Wdata;
      Wdata++;
          if (I2caRegs.I2CSTR.bit.NACK == 1)
                     return        I2C_BUS_BUSY_ERROR;
   }           
   return I2C_SUCCESS;   
}

Uint16 ReadData(Uint16  *RamAddr, Uint16 RomAddress, Uint16 number)
{
   Uint16  i,Temp;

   if (I2caRegs.I2CSTR.bit.BB == 1)
   {
       return I2C_BUS_BUSY_ERROR;
   }
   while(!I2C_xrdy());
   I2caRegs.I2CSAR = 0x50;
   I2caRegs.I2CCNT = 1;
   I2caRegs.I2CDXR = RomAddress;
   I2caRegs.I2CMDR.all = 0x6620;
   if (I2caRegs.I2CSTR.bit.NACK == 1)
                   return        I2C_BUS_BUSY_ERROR;
   DELAY_US(50);               
   while(!I2C_xrdy());
   I2caRegs.I2CSAR = 0x50;
   I2caRegs.I2CCNT = number;         
   I2caRegs.I2CMDR.all = 0x6C20;
   if (I2caRegs.I2CSTR.bit.NACK == 1)
                   return        I2C_BUS_BUSY_ERROR;
   for(i=0;i<number;i++)
   {
      while(!I2C_rrdy());
             Temp = I2caRegs.I2CDRR;
          if (I2caRegs.I2CSTR.bit.NACK == 1)
                     return        I2C_BUS_BUSY_ERROR;
             *RamAddr = Temp;
             RamAddr++;
   }
   return I2C_SUCCESS;
}


Uint16        I2C_xrdy()
{
        Uint16        t;
        t = I2caRegs.I2CSTR.bit.XRDY;
        return t;
}

Uint16        I2C_rrdy()
{
        Uint16        t;
        t = I2caRegs.I2CSTR.bit.RRDY;
        return t;
}
siyida 发表于 2014-9-9 16:20 | 显示全部楼层
void main(void)
{
.............

   WriteData(dat,0x60,8);
   DELAY_US(10000);
   ReadData(dat1,0x60,8);

   for(; ;)
   {

   }

}


在主程序里只有1次写读的过程,我不知,能否满足
wangch_sh 发表于 2014-9-9 16:24 | 显示全部楼层
你怎么测得?只读写1次,如果在读写完毕之后再测,肯定没有。

评分

参与人数 1威望 +1 收起 理由
thelust + 1 很给力!

查看全部评分

 楼主| thelust 发表于 2014-9-9 17:02 | 显示全部楼层
wangch_sh 发表于 2014-9-9 16:24
你怎么测得?只读写1次,如果在读写完毕之后再测,肯定没有。

我一直目不转睛的看着示波器,就算只读写一次,也应该有跳变啊,不会一直是低电平吧
wangch_sh 发表于 2014-9-9 17:04 | 显示全部楼层
我不清楚你是怎么测得。你把示波器先设成触发模式,然后运行程序,也测不到吗?应该是一瞬间的事。
wangch_sh 发表于 2014-9-9 17:07 | 显示全部楼层
实在测不到,或许硬件有问题。
 楼主| thelust 发表于 2014-9-9 17:12 | 显示全部楼层
多谢各位大神,问题解决了,单次读写太快,根本无法分辨时钟信号。后来把读写程序放到循环里面,就能很清晰的看到波形
zhangmangui 发表于 2014-9-9 22:36 | 显示全部楼层
恩  看到太迟了 已经解决了  
就是因为你只写了一次   错过了波形
连续读写 就可以看到了    你是用示波器看的还是用逻辑分析仪
 楼主| thelust 发表于 2014-9-10 10:55 | 显示全部楼层
zhangmangui 发表于 2014-9-9 22:36
恩  看到太迟了 已经解决了  
就是因为你只写了一次   错过了波形
连续读写 就可以看到了    你是用示波器 ...

示波器
flyhigh921 发表于 2015-3-6 15:43 | 显示全部楼层
楼主现在这个IIC调通了吗?想请教点问题!
vivilzb1985 发表于 2015-3-7 18:27 | 显示全部楼层
这个需要先看下SCK的信号的吧
vivilzb1985 发表于 2015-3-7 18:28 | 显示全部楼层
这个若耶没有的话,就需要检查下硬件的链接的问题的。
vivilzb1985 发表于 2015-3-7 18:29 | 显示全部楼层
还有就是该I2C模块的相关寄存器的也需要查看下的,,看开启该总线功能没。
1831249703 发表于 2015-4-17 16:02 | 显示全部楼层
thelust 发表于 2014-9-9 17:12
多谢各位大神,问题解决了,单次读写太快,根本无法分辨时钟信号。后来把读写程序放到循环里面,就能很清晰 ...

你好,可以把你调好的程序给我一份吗?我最近在调i2c但是一直调不通啊,跟你一样,示波器啥都没有
1831249703 发表于 2015-4-17 16:05 | 显示全部楼层
wangch_sh 发表于 2014-9-9 17:04
我不清楚你是怎么测得。你把示波器先设成触发模式,然后运行程序,也测不到吗?应该是一瞬间的事。 ...

你好,可以把你调好的程序给我一份吗?我最近在调i2c但是一直调不通啊,跟你一样,示波器啥都没有
1831249703 发表于 2015-4-17 16:05 | 显示全部楼层
zhangmangui 发表于 2014-9-9 22:36
恩  看到太迟了 已经解决了  
就是因为你只写了一次   错过了波形
连续读写 就可以看到了    你是用示波器 ...

版主你好,可以把你调好的i2c程序给我一份吗?我最近在调i2c但是一直调不通啊,示波器啥都没有
1831249703 发表于 2015-4-17 16:07 | 显示全部楼层
zhangmangui 发表于 2014-9-9 22:36
恩  看到太迟了 已经解决了  
就是因为你只写了一次   错过了波形
连续读写 就可以看到了    你是用示波器 ...

版主你好,我最近在调i2c的程序,但是一直调试不通,一直没有波形,你手头有调好的程序吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

11

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部