djsnake
驱动牛犊
驱动牛犊
  • 注册日期2002-10-29
  • 最后登录2003-07-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1135回复:3

郁闷--d12枚举

楼主#
更多 发布于:2003-04-18 21:57
为什么郁闷的人总是我?希望各位仁兄帮忙,小弟在调试USB枚举时,在进行单步执行时,
当执行到函数ep1_txdone()中的unsigned char D12_WriteBuffer(unsigned char endp ,
unsigned char *buf, unsigned char len) reentrant时出现死循环,当鼠标移到buf
时,提示指针无效,同时len也为0 ,但我觉得程序是对的,不知这是为什么???望各位
仁兄帮忙。小弟先谢了!!!!
Jkw_Dev
驱动中牛
驱动中牛
  • 注册日期2002-11-03
  • 最后登录2014-11-28
  • 粉丝0
  • 关注0
  • 积分82分
  • 威望28点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-19 08:47
把程序贴出来让大家看一下,要不谁也不知道你错哪儿了
djsnake
驱动牛犊
驱动牛犊
  • 注册日期2002-10-29
  • 最后登录2003-07-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-19 16:54
void ep0_txdone(void)
{
short i = ControlData.wLength - ControlData.wCount;

D12_ReadLastTransactionStatus(1); // Clear interrupt flag

if (bEPPflags.bits.control_state != USB_TRANSMIT)

return;
//-------------------------

   if( i >= EP0_PACKET_SIZE)
    {
//ControlData.pData=&ControlData.dataBuffer;
D12_WriteBuffer(1, ControlData.pData + ControlData.wCount,EP0_PACKET_SIZE);

ControlData.wCount += EP0_PACKET_SIZE;

bEPPflags.bits.control_state = USB_TRANSMIT;
     }
     else if( i != 0)
     {
D12_WriteBuffer(1,ControlData.pData + ControlData.wCount,i);

ControlData.wCount += i;

bEPPflags.bits.control_state = USB_IDLE;
      }
      else if (i == 0)
      {
D12_WriteBuffer(1, 0, 0); // Send zero packet at the end ???

bEPPflags.bits.control_state = USB_IDLE;
      }
}


unsigned char D12_WriteBuffer(unsigned char endp ,unsigned char *buf,unsigned char len)  reentrant
{

unsigned char i;

if(bEPPflags.bits.in_isr == 0)

 DISABLE;

 outportb(D12_COMMAND,endp); //选择端点

 inportb(D12_DATA);    //读入满/空状态

 //**********************************************
 outportb(D12_COMMAND,0xF0);   //写缓冲区命令

 outportb(D12_DATA,0);

 outportb(D12_DATA,len);

     for(i=0; i<len; i++)
{
  outportb(D12_DATA, *(buf+i));

  outportb(D12_COMMAND,0xFA);  //VALIDATE BUFFER
}

if(bEPPflags.bits.in_isr == 0)

  ENABLE;

return len;
}
Jkw_Dev
驱动中牛
驱动中牛
  • 注册日期2002-11-03
  • 最后登录2014-11-28
  • 粉丝0
  • 关注0
  • 积分82分
  • 威望28点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-19 17:58
程序应该没什么问题呀,你先检查一下几个常量的设置是不是有误,然后再看写入到端点的变量值是不是正确,比如ControlData.wLength和ControlData.wCount等
游客

返回顶部