想问下我用的是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了。为什么总线还是忙呢?