打印

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

[复制链接]
3688|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
thelust|  楼主 | 2014-9-9 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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;
}

使用特权

评论回复
5
siyida| | 2014-9-9 16:20 | 只看该作者
void main(void)
{
.............

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

   for(; ;)
   {

   }

}


在主程序里只有1次写读的过程,我不知,能否满足

使用特权

评论回复
6
wangch_sh| | 2014-9-9 16:24 | 只看该作者
你怎么测得?只读写1次,如果在读写完毕之后再测,肯定没有。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
thelust + 1 很给力!
7
thelust|  楼主 | 2014-9-9 17:02 | 只看该作者
wangch_sh 发表于 2014-9-9 16:24
你怎么测得?只读写1次,如果在读写完毕之后再测,肯定没有。

我一直目不转睛的看着示波器,就算只读写一次,也应该有跳变啊,不会一直是低电平吧

使用特权

评论回复
8
wangch_sh| | 2014-9-9 17:04 | 只看该作者
我不清楚你是怎么测得。你把示波器先设成触发模式,然后运行程序,也测不到吗?应该是一瞬间的事。

使用特权

评论回复
9
wangch_sh| | 2014-9-9 17:07 | 只看该作者
实在测不到,或许硬件有问题。

使用特权

评论回复
10
thelust|  楼主 | 2014-9-9 17:12 | 只看该作者
多谢各位大神,问题解决了,单次读写太快,根本无法分辨时钟信号。后来把读写程序放到循环里面,就能很清晰的看到波形

使用特权

评论回复
11
zhangmangui| | 2014-9-9 22:36 | 只看该作者
恩  看到太迟了 已经解决了  
就是因为你只写了一次   错过了波形
连续读写 就可以看到了    你是用示波器看的还是用逻辑分析仪

使用特权

评论回复
12
thelust|  楼主 | 2014-9-10 10:55 | 只看该作者
zhangmangui 发表于 2014-9-9 22:36
恩  看到太迟了 已经解决了  
就是因为你只写了一次   错过了波形
连续读写 就可以看到了    你是用示波器 ...

示波器

使用特权

评论回复
13
flyhigh921| | 2015-3-6 15:43 | 只看该作者
楼主现在这个IIC调通了吗?想请教点问题!

使用特权

评论回复
14
vivilzb1985| | 2015-3-7 18:27 | 只看该作者
这个需要先看下SCK的信号的吧

使用特权

评论回复
15
vivilzb1985| | 2015-3-7 18:28 | 只看该作者
这个若耶没有的话,就需要检查下硬件的链接的问题的。

使用特权

评论回复
16
vivilzb1985| | 2015-3-7 18:29 | 只看该作者
还有就是该I2C模块的相关寄存器的也需要查看下的,,看开启该总线功能没。

使用特权

评论回复
17
1831249703| | 2015-4-17 16:02 | 只看该作者
thelust 发表于 2014-9-9 17:12
多谢各位大神,问题解决了,单次读写太快,根本无法分辨时钟信号。后来把读写程序放到循环里面,就能很清晰 ...

你好,可以把你调好的程序给我一份吗?我最近在调i2c但是一直调不通啊,跟你一样,示波器啥都没有

使用特权

评论回复
18
1831249703| | 2015-4-17 16:05 | 只看该作者
wangch_sh 发表于 2014-9-9 17:04
我不清楚你是怎么测得。你把示波器先设成触发模式,然后运行程序,也测不到吗?应该是一瞬间的事。 ...

你好,可以把你调好的程序给我一份吗?我最近在调i2c但是一直调不通啊,跟你一样,示波器啥都没有

使用特权

评论回复
19
1831249703| | 2015-4-17 16:05 | 只看该作者
zhangmangui 发表于 2014-9-9 22:36
恩  看到太迟了 已经解决了  
就是因为你只写了一次   错过了波形
连续读写 就可以看到了    你是用示波器 ...

版主你好,可以把你调好的i2c程序给我一份吗?我最近在调i2c但是一直调不通啊,示波器啥都没有

使用特权

评论回复
20
1831249703| | 2015-4-17 16:07 | 只看该作者
zhangmangui 发表于 2014-9-9 22:36
恩  看到太迟了 已经解决了  
就是因为你只写了一次   错过了波形
连续读写 就可以看到了    你是用示波器 ...

版主你好,我最近在调i2c的程序,但是一直调试不通,一直没有波形,你手头有调好的程序吗

使用特权

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

本版积分规则

2

主题

11

帖子

0

粉丝