TI中文支持网
TI专业的中文技术问题搜集分享网站

28027的I2C例程无法运行

想问下我用的是28027但例程DSP2802x I2C EEPROM Example怎么跑不通?已经是过几个controlsuit里的DSP2802x I2C EEPROM Example例子都不行。不知道什么原因?

10#:

是自己做的板子吗?外部是否有挂EEPROM的芯片呢?有没量一下对应的I2C管脚是时钟和信号是否正常?同时,可以单步调试看看,寄存器写入是否在在成功。

想问下我用的是28027但例程DSP2802x I2C EEPROM Example怎么跑不通?已经是过几个controlsuit里的DSP2802x I2C EEPROM Example例子都不行。不知道什么原因?

重新开始:

回复 10#:

不是自己做的板子,是TI的LaunchPadTMS320F28027。例程里面说用的是板子上自带的EEPROM。

想问下我用的是28027但例程DSP2802x I2C EEPROM Example怎么跑不通?已经是过几个controlsuit里的DSP2802x I2C EEPROM Example例子都不行。不知道什么原因?

10#:

回复 重新开始:

确定一下是F28027还是F280270,如果已经明确那就没有问题。

上面有些建议,是否试过呢?

 

想问下我用的是28027但例程DSP2802x I2C EEPROM Example怎么跑不通?已经是过几个controlsuit里的DSP2802x I2C EEPROM Example例子都不行。不知道什么原因?

重新开始:

回复 10#:

确定过是28027,能不能把我看下这个程序ti\controlSUITE\device_support\f2802x\v200\f2802x_examples\i2c_eeprom,其他的i2c_eeprom都是一样的,只是description略有不同。我的程序是跑不通。程序r单步调试之后,一直在这两条语句之间运行,if(I2cMsgOut1.MsgStatus == I2C_MSGSTAT_SEND_WITHSTOP) 和 if (I2cMsgOut1.MsgStatus == I2C_MSGSTAT_INACTIVE)。一直检测是读还是写状态

想问下我用的是28027但例程DSP2802x I2C EEPROM Example怎么跑不通?已经是过几个controlsuit里的DSP2802x I2C EEPROM Example例子都不行。不知道什么原因?

重新开始:

回复 10#:

能不能用您自己板子跑下这个例程,帮忙看下问题出现在哪?

想问下我用的是28027但例程DSP2802x I2C EEPROM Example怎么跑不通?已经是过几个controlsuit里的DSP2802x I2C EEPROM Example例子都不行。不知道什么原因?

10#:

回复 重新开始:

我还真没有这个板子,不过我看下周能不能给你个答复吧。

另外,你确定板上是有EEPROM?还有,你有参考哪个文档进行调试吗?

想问下我用的是28027但例程DSP2802x I2C EEPROM Example怎么跑不通?已经是过几个controlsuit里的DSP2802x I2C EEPROM Example例子都不行。不知道什么原因?

10#:

回复 10#:

我刚找原理图检查了下,并没有发现板上有EEPROM芯片,你能确定一下吗?

另外,你在哪个文档上看到说有的吗?

想问下我用的是28027但例程DSP2802x I2C EEPROM Example怎么跑不通?已经是过几个controlsuit里的DSP2802x I2C EEPROM Example例子都不行。不知道什么原因?

重新开始:

回复 10#:

原理图上我只看到了这个 也没找到其他的EEPROM。程序描述里有这样一段

//!This program will work with the on-board I2C EEPROM supplied on//!   the F2802x eZdsp or another EEPROM connected to the devices I2C bus//!   with a slave address of 0x50,难道eZdsp是另一种板子名称?

想问下我用的是28027但例程DSP2802x I2C EEPROM Example怎么跑不通?已经是过几个controlsuit里的DSP2802x I2C EEPROM Example例子都不行。不知道什么原因?

重新开始:

回复 10#:

我看EEPROM程序就是要对LMP9100进行读写操作,下面是我自己根据LMP9100还有TI给的例程自己写的程序,TI提供的例程用到了中断,我的没有用中断方式读写。帮我看下有错误没有,

void LMP91000_Init(void){   // Initialize I2C   I2caRegs.I2CSAR = 0x0048;        // LMP9100 Slave address

   // I2CCLK = SYSCLK/(I2CPSC+1)     I2caRegs.I2CPSC.all = 6;       // Prescaler – need 7-12 Mhz on module clk   I2caRegs.I2CCLKL = 55;           // NOTE: must be non zero   I2caRegs.I2CCLKH = 35;            // NOTE: must be non zero   I2caRegs.I2CMDR.all = 0x0020;    // Take I2C out of reset                               

      // Stop I2C when suspended   I2caRegs.I2CFFTX.all = 0x6000;   // Enable FIFO mode and TXFIFO   I2caRegs.I2CFFRX.all = 0x2040;   // Enable RXFIFO, clear RXFFINT,

   return;}

void LMP91000_Write(Uint16 address,Uint16 data){ TXByteCtr=2;         //发送多少位   // Wait until the STP bit is cleared from any previous master communication.   // Clearing of this bit by the module is delayed until after the SCD bit is   // set. If this bit is not checked prior to initiating a new message, the   // I2C could get confused.   while (I2caRegs.I2CMDR.bit.STP == 1)    I2caRegs.I2CSAR = 0x0048;   while (I2caRegs.I2CSTR.bit.BB == 1); I2caRegs.I2CCNT=TXByteCtr; I2CBufferArray[1] = address;                 //先存储发送LMP91000需要写数据的寄存器地址到中间数组 I2CBufferArray[0] = data;      //再存储发送LMP91000需要到寄存器地址的数据到中间数组

 I2caRegs.I2CDXR = I2CBufferArray[1]; I2caRegs.I2CDXR = I2CBufferArray[0];    I2caRegs.I2CMDR.all = 0x6e20;      //使能I2C,主模式写,7位地址,internal data counter of the I2C module counts down to 0产生STOP    return;}

Uint16 LMP91000_Read(Uint16 address){   // Wait until the STP bit is cleared from any previous master communication.   // Clearing of this bit by the module is delayed until after the SCD bit is   // set. If this bit is not checked prior to initiating a new message, the   // I2C could get confused.    while (I2caRegs.I2CMDR.bit.STP == 1);    I2caRegs.I2CSAR = 0x0048;       I2caRegs.I2CCNT = 1;       I2caRegs.I2CDXR = address;    I2caRegs.I2CMDR.all = 0x2e20;   //发送start位,主模式写,internal data counter of the I2C module counts down to 0产生STOP     while (I2caRegs.I2CSTR.bit.BB == 1);  //总线是否忙     I2caRegs.I2CSAR = 0x0048;       I2caRegs.I2CCNT = 1;

       I2caRegs.I2CMDR.all = 0x2620;  //发送start位,主模式读,不产生stop

       if(I2caRegs.I2CSTR.bit.NACKSNT == 1) //如果I2C模块是否发送发送NACK       {

        I2caRegs.I2CMDR.bit.STP =1;    //stop位置1        I2caRegs.I2CSTR.bit.NACKSNT=1;清除NACK标志位     I2CBuffer = I2caRegs.I2CDRR;       }

  return I2CBuffer;         //返回接收到的值}

 

想问下我用的是28027但例程DSP2802x I2C EEPROM Example怎么跑不通?已经是过几个controlsuit里的DSP2802x I2C EEPROM Example例子都不行。不知道什么原因?

重新开始:

回复 10#:

LMP9100的读写过程是参考LMP9100文档里的时序写的。但是进行第二次读或者写的是就过不去了。一直是总线忙,可是我已经都把STP为置1了。为什么总线还是忙呢?

赞(0)
未经允许不得转载:TI中文支持网 » 28027的I2C例程无法运行
分享到: 更多 (0)