阅读:1694回复:0
MCU+D12+外部RAM,读数据出错,紧急求救!!help me!!
各位,我用的MCU+D12+外部RAM,但是我现在发现读写存储器时老出问题,我的驱动用的是周立
功的,顺便也用了EsayD12.dll,我首先是通过端点2用 WritePort2(databuff,64)写数据给MCU ,主端点OUT固件如下 //主端点OUT控制 void main_rxdone(void) { unsigned char len,epstatus; unsigned char i; D12_ReadLastTransactionStatus(4); //清中断标志位 //接收数据 len = D12_ReadEndpoint(4, 64, EpBuf); epstatus=D12_ReadEndpointStatus(4); epstatus &= 0x60; if (epstatus == 0x60) len = D12_ReadEndpoint(4, 64, EpBuf);//读取双缓冲区数据 MCU_D12CS = 0x1; MCU_RAMCS =0x0; for(i=0;i<len;i++) XBYTE[RAMdata+i] = EpBuf; MCU_RAMCS =0x1; MCU_D12CS = 0x0; if (epstatus == 0x60) len = D12_ReadEndpoint(4, 64, EpBuf);//读取双缓冲区数据 } 然后我通过端点1发个字符'c'来通知MCU,PC机要开始读数据了 //端点1OUT处理 void ep1_rxdone(void) { unsigned char len; D12_ReadLastTransactionStatus(2); //清中断标志位 len = D12_ReadEndpoint(2, sizeof(GenEpBuf), GenEpBuf);//读取数据 if(len != 0) bEPPflags.bits.ep1_rxdone = 1;//标志接收到数据 if(GenEpBuf[0]=='c') //自己定义:判断是不是要读数据 main_txdone(); //这个就是主端点IN控制 } //主端点IN控制如下 void main_txdone(void) { // unsigned char len,epstatus; unsigned char i; D12_ReadLastTransactionStatus(5); //清中断标志位 MCU_D12CS = 0x1; MCU_RAMCS = 0x0; for(i=0;i<64;i++) //自己定义,写数据到外部RAM EpBuf = XBYTE[RAMdata+i]; MCU_RAMCS =0x1; MCU_D12CS = 0x0; D12_WriteEndpoint(5, 64, EpBuf); } 然后我在PC机端用ReadPort2(databuff,64)读数据,发现读出来的数据与写进去的不一致,比如我写的数据是64个'i',读出来的却是iiiiiiiiiiiiiiiiyyyyyyyyyyyyyyyyiiiiiiiiiiiiiiiiyyyyyyyyyyyyyyyy,真不知道错了那 里,后来我把存储器的首地址从0X0000改为0X0030,却发现写了64个'i'进去,读出来的却是yyyyyyyyyyyyyyyiiiiiiiiiiiiiiiiyyyyyyyyyyyyyyyyiiiiiiiiiiiiiiii,真是奇怪了。 另外我在程序里不用外部RAM时,读写都是正常的,所以我估计主要问题就是出在读写外部RAM时的问题。但是我在KEIL C的仿镇环境(也有读写外部RAM)下发现与预期的目标是一致的也就是说写64个'i'进去,读出来的也是64个'i'。。 各位大虾,这个到底是怎么回事啊!,这个与存储器的读写速度有没有关系啊!!忘大侠指点迷津,不胜感激。。 |
|