jiangliq_2000
驱动牛犊
驱动牛犊
  • 注册日期2003-07-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1694回复:0

MCU+D12+外部RAM,读数据出错,紧急求救!!help me!!

楼主#
更多 发布于:2004-06-05 22:23
各位,我用的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'。。

   各位大虾,这个到底是怎么回事啊!,这个与存储器的读写速度有没有关系啊!!忘大侠指点迷津,不胜感激。。
游客

返回顶部