-
尝试着把LPC_I2C->CONCLR = I2CONCLR_SIC;这句话加在
case 0x08:
LPC_I2C->CONCLR = I2CONCLR_SIC; ……
break;
结果还是一样。
顺便我在示波器上抓了个波形。
:Cry: 求指教,这个问题困扰了。
-
这里
已经出错了。
-
这里 还是正确的
-
这一张是case 0xa8:
case 0xb0:
的截图,是正确的。
-
问题:
执行
case 0xa8:
case 0xb0:
。。。。。
break;
这里正常,LPC_I2C->DAT 的值是0x01 主机可以正确收到。
执行
case 0xb8: 出现问题。
执行 LPC_I2C->DAT = SlaveSendBuffer[SlaveWrIndex++]; 在调试窗口看到值是 0x02 正确。
但是执行完LPC_I2C->CONCLR = I2CONCLR_SIC; 程序进入print时,发现LPC_I2C->DAT 值 是 0x00 而串口打印出来竟然还是 0x02. 然后我看主机收到的数据还是0x00. 在从示波器上看波形 也是移植低电平。我开始以为打印可能影响到了通信,去掉打印后 还是一样
我的从机哪里错了呢?
-
感谢各位支持,特别是版主上传的那份LPC1114,我截下其中一张图,解决了这个I2C问
[ 本帖最后由 hades2011 于 2012-4-24 16:45 编辑 ]
-
问题解决:由于中断中加了打印时间,而我没有开启时钟展延,出错。解决方法是I2CSlaveRecvBuffer[SlaveRdIndex++] = LPC_I2C->DATA_BUFFER;
-
具体的问题,目前进行到这一步了:
我写数据 0x50(这个是LPC1114的地址,写操作) 0x10 0x30 0x08 0x01 0x02 0x03
但是接收端打印的数据却是: 0x20 0x60 0x10 0x02 0x04 0x06
发现数据刚好发生左移一位。于是我猜想可能是中途丢失了一个时钟,但是我从示波器抓的波形看,发现波形正确。那么是不是从机中断函数出错了?
-
拿来看看 顶
-
我主机是用51单片机模拟的,从机是LPC1114 用中断做的,具体的代码可以上传。中断函数的代码已经上传了,我改主机的速率在2K左右能正常写从机,改到5K左右就出现错误了。二仍以5K的主机去读取STM8的从机,是正确的。所以我怀疑问题处在LPC1114的从机这里。
-
I2C 从机的速率不是跟随主机的么?
-
打印部分:
state:0x60
state:0x60
state:0x00
state:0x60
state:0x60
state:0x00
state:0x60
state:0x60
state:0x00
state:0x60
state:0x60
state:0x00
state:0x60
state:0x60
state:0x00
state:0x60
-
我可以延时一段时间 再去检测 这样软件消抖么?
-
void PIOINT0_IRQHandler(void){uint32_t regVal;static int flag = 0;for (ii=0;ii<12;ii++){regVal = GPIOIntStatus( PORT0, ii );if (regVal){printf("interrupt happened!\t%d\t\n",ii);PIO0IntStatus = 1<< ii;GPIOIntClear( PORT0, ii );printf("\t%d\n",PIO0IntStatus);}#if 1
/*这段代码放这里 出错 没有按下键,却在PIO0_2上测试一个100多HZ的方波*/if ((PIO0IntStatus & 0x01<<2)==(0x01<<2)){printf("\t%d\n",PIO0IntStatus);GPIOSetValue(0,1,flag);PIO0IntStatus = 0;flag = ~flag;}#endif}return;}
-
楼主 我不明白一个函数:
void GPIOSetValue( uint32_t portNum, uint32_t bitPosi, uint32_t bitVal )
{
LPC_GPIO[portNum]->MASKED_ACCESS[(1
-
小菜鸟而已,才刚接触WINCE的,很多都不懂。
-
小菜鸟而已,才刚接触WINCE的,很多都不懂。
-
用 C 写的代码,有模块的代码在一直过程中出现问题,编译通不过。主要在编译winnt.h出现错误,还有就是环境变量_WIN32_WCE。
-
uCFS
-
补充:关于一个WebServer的项目,官网上下载的shttpd。