⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ohcihcd.bak

📁 RDC R2886 USB Ehci ohc测试源码,paradigm c++上运行测试
💻 BAK
📖 第 1 页 / 共 4 页
字号:
   if(dir==0)  //0:set
   {
      //Ctl_Data = (char *)dev_des;

      ohci_Ctl_TD2->hwINFO = TD_DP_OUT|TD_T_DATA1|TD_DI|TD_R;//0x03540000L;
      ohci_Ctl_TD2->hwNextTD = 0;
      ohci_Ctl_TD2->hwCBP = (UpperAddr(ISOSetBuf) << 16) + LowerAddr(ISOSetBuf);
      ohci_Ctl_TD2->hwBE = ohci_Ctl_TD2->hwCBP + len - 1;

      //Status Stage
      ohci_Ctl_TD3->hwINFO = TD_DP_IN|TD_T_DATA1|TD_DI;//0x02480000L;
      ohci_Ctl_TD3->hwNextTD = 0;
      ohci_Ctl_TD3->hwCBP = 0;
      ohci_Ctl_TD3->hwBE = 0;	//Out 0 bytes
   }
   else
   {
   	//Ctl_Data = (char *)dev_des;

      ohci_Ctl_TD2->hwINFO = TD_DP_IN|TD_T_DATA1|TD_DI|TD_R;//0x03540000L;
      ohci_Ctl_TD2->hwNextTD = 0;
      ohci_Ctl_TD2->hwCBP = (UpperAddr(ISOGetBuf) << 16) + LowerAddr(ISOGetBuf);
      ohci_Ctl_TD2->hwBE = ohci_Ctl_TD2->hwCBP + len - 1;

      //Status Stage
      ohci_Ctl_TD3->hwINFO = TD_DP_OUT|TD_T_DATA1|TD_DI;//0x02480000L;
      ohci_Ctl_TD3->hwNextTD = 0;
      ohci_Ctl_TD3->hwCBP = 0;
      ohci_Ctl_TD3->hwBE = 0;	//Out 0 bytes
   }
	AddingTDtoED(ohci_Ep0, ohci_Ctl_TD3);
	AddingTDtoED(ohci_Ep0, ohci_Ctl_TD2);
	AddingTDtoED(ohci_Ep0, ohci_Ctl_TD1);

	//Set Control_Filled
	Temp = ohci_regs->cmdstatus | OHCI_CLF;
	DWordWrite(&ohci_regs->cmdstatus, Temp);

	do{} while(DoneHeadClear == FALSE);

}

//ISO transfer, use periodic schedule
void InitISOList()
{
   int i;
   
   //Init ISO buf
   for(i=0;i<35;i++)
   {
     	ISOSetBuf[i]=0;
      ISOGetBuf[i]=0;
   }
   
    //Set Configuration1
	OHCI_Set_Configuration(1);

   //Set interface
	OHCI_Set_Interface(0);

   //ISO Init Control transfer
   //set 00
   ISOSetBuf[0]=0; 	ISOControlTransfer(0,0x1440,1);
   //get 70 08
   ISOControlTransfer(1,0xE00A,2);
   //set 05
   ISOSetBuf[0]=5; 	ISOControlTransfer(0,0x0423,1);
   //set 35bytes
   ISOSetBuf[0]=0;  	ISOSetBuf[1]=0x2A;	ISOSetBuf[2]=0xc8;	ISOSetBuf[3]=0xD7;	ISOSetBuf[4]=0;
   ISOSetBuf[5]=0;  	ISOSetBuf[6]=0;	ISOSetBuf[7]=0;	ISOSetBuf[8]=0;	ISOSetBuf[9]=0;
   ISOSetBuf[10]=0;  	ISOSetBuf[11]=0;	ISOSetBuf[12]=0xF0;	ISOSetBuf[13]=0x7A;	ISOSetBuf[14]=0x66;
   ISOSetBuf[15]=0xc1;  	ISOSetBuf[16]=0xe0;	ISOSetBuf[17]=0x2a;	ISOSetBuf[18]=0xc8;	ISOSetBuf[19]=0xd7;
   ISOSetBuf[20]=0x7c;  	ISOSetBuf[21]=0xb1;	ISOSetBuf[22]=0x67;	ISOSetBuf[23]=0xc1;	ISOSetBuf[24]=0x3d;
   ISOSetBuf[25]=0x4c;  	ISOSetBuf[26]=0x14;	ISOSetBuf[27]=0xff;	ISOSetBuf[28]=0x28;	ISOSetBuf[29]=0;
   ISOSetBuf[30]=0;  	ISOSetBuf[31]=0;	ISOSetBuf[32]=0xba;	ISOSetBuf[33]=0;	ISOSetBuf[34]=3;	ISOControlTransfer(0,0x1400,35);
   //get 0a
   ISOControlTransfer(1,0x0424,1);
   //set 04
   ISOSetBuf[0]=4; 	ISOControlTransfer(0,0x0423,1);
   //get 02  three times
   ISOControlTransfer(1,0x1444,1);   	ISOControlTransfer(1,0x1444,1);		ISOControlTransfer(1,0x1444,1);
   //set 05
   ISOSetBuf[0]=5; 	ISOControlTransfer(0,0x0423,1);
   //set 35bytes
   ISOSetBuf[0]=0;  	ISOSetBuf[1]=1;	ISOSetBuf[2]=0xc8;	ISOSetBuf[3]=0xD7;	ISOSetBuf[4]=0x1;
   ISOSetBuf[5]=0;  	ISOSetBuf[6]=0;	ISOSetBuf[7]=0;	ISOSetBuf[8]=0;	ISOSetBuf[9]=0;
   ISOSetBuf[10]=0;  	ISOSetBuf[11]=0;	ISOSetBuf[12]=0x7c;	ISOSetBuf[13]=0xb1;	ISOSetBuf[14]=0x67;
   ISOSetBuf[15]=0xc1;  	ISOSetBuf[16]=0xf0;	ISOSetBuf[17]=0xbb;	ISOSetBuf[18]=0x67;	ISOSetBuf[19]=0xc1;
   ISOSetBuf[20]=0xa7;  	ISOSetBuf[21]=0x5b;	ISOSetBuf[22]=0x14;	ISOSetBuf[23]=0xff;	ISOSetBuf[24]=0x7c;
   ISOSetBuf[25]=0xb1;  	ISOSetBuf[26]=0x67;	ISOSetBuf[27]=0xc1;	ISOSetBuf[28]=0x23;	ISOSetBuf[29]=0x4;
   ISOSetBuf[30]=0;  	ISOSetBuf[31]=0;	ISOSetBuf[32]=0x20;	ISOSetBuf[33]=0x1;	ISOSetBuf[34]=3;	ISOControlTransfer(0,0x1400,35);
   //get 0a
   ISOControlTransfer(1,0x0424,1);
   //set 35bytes 	same data
   ISOControlTransfer(0,0x1400,35);
   //get 0a
   ISOControlTransfer(1,0x0424,1);
   //set 04
   ISOSetBuf[0]=4; 	ISOControlTransfer(0,0x0423,1);
   //set 04
   ISOSetBuf[0]=4; 	ISOControlTransfer(0,0x0423,1);
   //set 35bytes
   ISOSetBuf[0]=0x1;  	ISOSetBuf[1]=0x2a;	ISOSetBuf[2]=0xc8;	ISOSetBuf[3]=0xD7;	ISOSetBuf[4]=0xbc;
   ISOSetBuf[5]=0x2a;  	ISOSetBuf[6]=0xc8;	ISOSetBuf[7]=0xd7;	ISOSetBuf[8]=0x7c;	ISOSetBuf[9]=0xb1;
   ISOSetBuf[10]=0x67;  	ISOSetBuf[11]=0xc1;	ISOSetBuf[12]=0x0;	ISOSetBuf[13]=0x0;	ISOSetBuf[14]=0x0;
   ISOSetBuf[15]=0x0;  	ISOSetBuf[16]=0xf0;	ISOSetBuf[17]=0xbb;	ISOSetBuf[18]=0x67;	ISOSetBuf[19]=0xc1;
   ISOSetBuf[20]=0x20;  	ISOSetBuf[21]=0x73;	ISOSetBuf[22]=0x16;	ISOSetBuf[23]=0xff;	ISOSetBuf[24]=0x23;
   ISOSetBuf[25]=0x04;  	ISOSetBuf[26]=0x0;	ISOSetBuf[27]=0x0;	ISOSetBuf[28]=0xa6;	ISOSetBuf[29]=0x3c;
   ISOSetBuf[30]=0x14;  	ISOSetBuf[31]=0xff;	ISOSetBuf[32]=0xaa;	ISOSetBuf[33]=0x0;	ISOSetBuf[34]=3;	ISOControlTransfer(0,0x1400,35);
   //get 02
   ISOControlTransfer(1,0x0424,1);
   //get 08
   ISOControlTransfer(1,0x1410,1);
   //set 35bytes 	same data
   ISOControlTransfer(0,0x1400,35);
   //get 02
   ISOControlTransfer(1,0x0424,1);
   //get 08
   ISOControlTransfer(1,0x1410,1);
   //set 1d
   ISOSetBuf[0]=0x1d; 	ISOControlTransfer(0,0x1500,1);
   //get 00
   ISOControlTransfer(1,0x1443,1);
   //set 01
   ISOSetBuf[0]=0x01; 	ISOControlTransfer(0,0x1443,1);
   //get 01
   ISOControlTransfer(1,0x1443,1);
   //set 00
   ISOSetBuf[0]=0x0; 	ISOControlTransfer(0,0x1443,1);
   //set 00
   ISOSetBuf[0]=0x0; 	ISOControlTransfer(0,0x1446,1);
   //set 35bytes
   ISOSetBuf[0]=0x6;  	ISOSetBuf[1]=0x8;	ISOSetBuf[2]=0x2e;	ISOSetBuf[3]=0x12;	ISOSetBuf[4]=0xf0;
   ISOSetBuf[5]=0xbb;  	ISOSetBuf[6]=0x67;	ISOSetBuf[7]=0xc1;	ISOSetBuf[8]=0x5a;	ISOSetBuf[9]=0x41;
   ISOSetBuf[10]=0x14;  	ISOSetBuf[11]=0xff;	ISOSetBuf[12]=0x7c;	ISOSetBuf[13]=0xb1;	ISOSetBuf[14]=0x67;
   ISOSetBuf[15]=0xc1;  	ISOSetBuf[16]=0x63;	ISOSetBuf[17]=0x0;	ISOSetBuf[18]=0x8;	ISOSetBuf[19]=0xa;
   ISOSetBuf[20]=0xd3;  	ISOSetBuf[21]=0x2a;	ISOSetBuf[22]=0xc8;	ISOSetBuf[23]=0xd7;	ISOSetBuf[24]=0x1;
   ISOSetBuf[25]=0x0;  	ISOSetBuf[26]=0x0;	ISOSetBuf[27]=0x0;	ISOSetBuf[28]=0xe4;	ISOSetBuf[29]=0x2a;
   ISOSetBuf[30]=0xc8;  	ISOSetBuf[31]=0xd7;	ISOSetBuf[32]=0xaa;	ISOSetBuf[33]=0x3;	ISOSetBuf[34]=0x1;	ISOControlTransfer(0,0x400,35);
   //set 35bytes
   ISOSetBuf[0]=0x1e;  	ISOSetBuf[1]=0x20;	ISOSetBuf[2]=0x22;	ISOSetBuf[3]=0x24;	ISOSetBuf[4]=0xd0;
   ISOSetBuf[5]=0x20;  	ISOSetBuf[6]=0xa3;	ISOSetBuf[7]=0xc2;	ISOSetBuf[8]=0x0;	ISOSetBuf[9]=0x0;
   ISOSetBuf[10]=0x0;  	ISOSetBuf[11]=0x0;	ISOSetBuf[12]=0x4a;	ISOSetBuf[13]=0xa0;	ISOSetBuf[14]=0x92;
   ISOSetBuf[15]=0xc1;  	ISOSetBuf[16]=0x40;	ISOSetBuf[17]=0x40;	ISOSetBuf[18]=0x40;	ISOSetBuf[19]=0x40;
   ISOSetBuf[20]=0x20;  	ISOSetBuf[21]=0x30;	ISOSetBuf[22]=0x91;	ISOSetBuf[23]=0xc1;	ISOSetBuf[24]=0x20;
   ISOSetBuf[25]=0x30;  	ISOSetBuf[26]=0x91;	ISOSetBuf[27]=0xc1;	ISOSetBuf[28]=0x17;	ISOSetBuf[29]=0xcb;
   ISOSetBuf[30]=0x0;  	ISOSetBuf[31]=0xc0;	ISOSetBuf[32]=0xaa;	ISOSetBuf[33]=0x3;	ISOSetBuf[34]=0x1;	ISOControlTransfer(0,0x400,35);
   //set 07
   ISOSetBuf[0]=0x7; 	ISOControlTransfer(0,0x1504,1);
   //set 45
   ISOSetBuf[0]=0x45; 	ISOControlTransfer(0,0x1503,1);
   //get 1d
   ISOControlTransfer(1,0x1500,1);
   //set 1d
   ISOSetBuf[0]=0x1d; 	ISOControlTransfer(0,0x1500,1);
   //get 70 08
   ISOControlTransfer(1,0xE00A,2);
   //Set interface
	OHCI_Set_Interface(1);
   OHCI_Set_Interface(0);
   OHCI_Set_Interface(1);
   OHCI_Set_Interface(0);
   OHCI_Set_Interface(1);
   OHCI_Set_Interface(0);
   OHCI_Set_Interface(1);
   //set 04
   ISOSetBuf[0]=0x4; 	ISOControlTransfer(0,0x0423,1);
   //set 1d
   ISOSetBuf[0]=0x1d; 	ISOControlTransfer(0,0x1500,1);
   //set 35bytes
   ISOSetBuf[0]=0x06;  	ISOSetBuf[1]=0x8;	ISOSetBuf[2]=0x2e;	ISOSetBuf[3]=0x12;	ISOSetBuf[4]=0x7c;
   ISOSetBuf[5]=0xb1;  	ISOSetBuf[6]=0x67;	ISOSetBuf[7]=0xc1;	ISOSetBuf[8]=0x0;	ISOSetBuf[9]=0x15;
   ISOSetBuf[10]=0x0;  	ISOSetBuf[11]=0x0;	ISOSetBuf[12]=0x74;	ISOSetBuf[13]=0xab;	ISOSetBuf[14]=0xca;
   ISOSetBuf[15]=0xd7;  	ISOSetBuf[16]=0x63;	ISOSetBuf[17]=0x0;	ISOSetBuf[18]=0x8;	ISOSetBuf[19]=0xa;
   ISOSetBuf[20]=0xf0;  	ISOSetBuf[21]=0xbb;	ISOSetBuf[22]=0x67;	ISOSetBuf[23]=0xc1;	ISOSetBuf[24]=0x79;
   ISOSetBuf[25]=0x35;  	ISOSetBuf[26]=0x14;	ISOSetBuf[27]=0xff;	ISOSetBuf[28]=0x7c;	ISOSetBuf[29]=0xb1;
   ISOSetBuf[30]=0x67;  	ISOSetBuf[31]=0xc1;	ISOSetBuf[32]=0xaa;	ISOSetBuf[33]=0x3;	ISOSetBuf[34]=0x1;	ISOControlTransfer(0,0x400,35);
   //set 02
   ISOSetBuf[0]=0x2; 	ISOControlTransfer(0,0x15c3,1);
   //set 84 02
   ISOSetBuf[0]=0x84; 	ISOSetBuf[1]=0x2;	ISOControlTransfer(0,0x15c1,2);
   //set 35bytes
   ISOSetBuf[0]=0x14;  	ISOSetBuf[1]=0x16;	ISOSetBuf[2]=0x18;	ISOSetBuf[3]=0x1a;	ISOSetBuf[4]=0x0;
   ISOSetBuf[5]=0x0;  	ISOSetBuf[6]=0x0;	ISOSetBuf[7]=0x0;	ISOSetBuf[8]=0x7c;	ISOSetBuf[9]=0xb1;
   ISOSetBuf[10]=0x67;  	ISOSetBuf[11]=0xc1;	ISOSetBuf[12]=0x0;	ISOSetBuf[13]=0x0;	ISOSetBuf[14]=0x0;
   ISOSetBuf[15]=0x0;  	ISOSetBuf[16]=0x0;	ISOSetBuf[17]=0x7;	ISOSetBuf[18]=0x3e;	ISOSetBuf[19]=0x56;
   ISOSetBuf[20]=0x7c;  	ISOSetBuf[21]=0xb1;	ISOSetBuf[22]=0x67;	ISOSetBuf[23]=0xc1;	ISOSetBuf[24]=0xc1;
   ISOSetBuf[25]=0x15;  	ISOSetBuf[26]=0x0;	ISOSetBuf[27]=0x0;	ISOSetBuf[28]=0x64;	ISOSetBuf[29]=0xab;
   ISOSetBuf[30]=0xca;  	ISOSetBuf[31]=0xd7;	ISOSetBuf[32]=0xaa;	ISOSetBuf[33]=0x3;	ISOSetBuf[34]=0x1;	ISOControlTransfer(0,0x400,35);
   //set 00
   ISOSetBuf[0]=0x0; 	ISOControlTransfer(0,0x1680,1);
   //set 35bytes
   ISOSetBuf[0]=0x1c;  	ISOSetBuf[1]=0xa;	ISOSetBuf[2]=0xc;	ISOSetBuf[3]=0x0;	ISOSetBuf[4]=0xcc;
   ISOSetBuf[5]=0x82;  	ISOSetBuf[6]=0x67;	ISOSetBuf[7]=0xc1;	ISOSetBuf[8]=0xf0;	ISOSetBuf[9]=0xbb;
   ISOSetBuf[10]=0x67;  	ISOSetBuf[11]=0xc1;	ISOSetBuf[12]=0x0;	ISOSetBuf[13]=0x0;	ISOSetBuf[14]=0x0;
   ISOSetBuf[15]=0x0;  	ISOSetBuf[16]=0x7e;	ISOSetBuf[17]=0x0;	ISOSetBuf[18]=0x16;	ISOSetBuf[19]=0xd7;
   ISOSetBuf[20]=0x35;  	ISOSetBuf[21]=0x76;	ISOSetBuf[22]=0x14;	ISOSetBuf[23]=0xff;	ISOSetBuf[24]=0xcc;
   ISOSetBuf[25]=0x82;  	ISOSetBuf[26]=0x67;	ISOSetBuf[27]=0xc1;	ISOSetBuf[28]=0x80;	ISOSetBuf[29]=0x16;
   ISOSetBuf[30]=0x0;  	ISOSetBuf[31]=0x0;	ISOSetBuf[32]=0xaa;	ISOSetBuf[33]=0x2;	ISOSetBuf[34]=0x1;	ISOControlTransfer(0,0x400,35);
   //set 00
   ISOSetBuf[0]=0x0; 	ISOControlTransfer(0,0x1446,1);
   //set 35bytes
   ISOSetBuf[0]=0x26;  	ISOSetBuf[1]=0x28;	ISOSetBuf[2]=0x2a;	ISOSetBuf[3]=0x2c;	ISOSetBuf[4]=0x90;
   ISOSetBuf[5]=0x7d;  	ISOSetBuf[6]=0x07;	ISOSetBuf[7]=0x0;	ISOSetBuf[8]=0x0;	ISOSetBuf[9]=0x0;
   ISOSetBuf[10]=0x0;  	ISOSetBuf[11]=0x0;	ISOSetBuf[12]=0x7c;	ISOSetBuf[13]=0xb1;	ISOSetBuf[14]=0x67;
   ISOSetBuf[15]=0xc1;  	ISOSetBuf[16]=0x7c;	ISOSetBuf[17]=0x0;	ISOSetBuf[18]=0x68;	ISOSetBuf[19]=0x0b;
   ISOSetBuf[20]=0x10;  	ISOSetBuf[21]=0x55;	ISOSetBuf[22]=0x19;	ISOSetBuf[23]=0x0;	ISOSetBuf[24]=0xc0;
   ISOSetBuf[25]=0x30;  	ISOSetBuf[26]=0x0;	ISOSetBuf[27]=0x0;	ISOSetBuf[28]=0x0;	ISOSetBuf[29]=0x92;
   ISOSetBuf[30]=0xe8;  	ISOSetBuf[31]=0x87;	ISOSetBuf[32]=0xaa;	ISOSetBuf[33]=0x3;	ISOSetBuf[34]=0x1;	ISOControlTransfer(0,0x400,35);
   //set c1
   ISOSetBuf[0]=0xc1; 	ISOControlTransfer(0,0x1501,1);
   //set b0
   ISOSetBuf[0]=0xb0; 	ISOControlTransfer(0,0x1502,1);
   //set 35bytes
   ISOSetBuf[0]=0x6;  	ISOSetBuf[1]=0x8;	ISOSetBuf[2]=0x2e;	ISOSetBuf[3]=0x12;	ISOSetBuf[4]=0x1c;
   ISOSetBuf[5]=0xab;  	ISOSetBuf[6]=0xca;	ISOSetBuf[7]=0xd7;	ISOSetBuf[8]=0xd8;	ISOSetBuf[9]=0xdd;
   ISOSetBuf[10]=0x14;  	ISOSetBuf[11]=0xff;	ISOSetBuf[12]=0x0;	ISOSetBuf[13]=0x0;	ISOSetBuf[14]=0x0;
   ISOSetBuf[15]=0x0;  	ISOSetBuf[16]=0x63;	ISOSetBuf[17]=0x0;	ISOSetBuf[18]=0x8;	ISOSetBuf[19]=0x0a;
   ISOSetBuf[20]=0xf0;  	ISOSetBuf[21]=0xbb;	ISOSetBuf[22]=0x67;	ISOSetBuf[23]=0xc1;	ISOSetBuf[24]=0x0;
   ISOSetBuf[25]=0x0;  	ISOSetBuf[26]=0x0;	ISOSetBuf[27]=0x0;	ISOSetBuf[28]=0x58;	ISOSetBuf[29]=0xab;
   ISOSetBuf[30]=0xca;  	ISOSetBuf[31]=0xd7;	ISOSetBuf[32]=0xaa;	ISOSetBuf[33]=0x3;	ISOSetBuf[34]=0x1;	ISOControlTransfer(0,0x400,35);
   //set 35bytes
   ISOSetBuf[0]=0x30;  	ISOSetBuf[1]=0x0;	ISOSetBuf[2]=0x0;	ISOSetBuf[3]=0x0;	ISOSetBuf[4]=0x7c;
   ISOSetBuf[5]=0xb1;  	ISOSetBuf[6]=0x67;	ISOSetBuf[7]=0xc1;	ISOSetBuf[8]=0xa4;	ISOSetBuf[9]=0xba;
   ISOSetBuf[10]=0x67;  	ISOSetBuf[11]=0xc1;	ISOSetBuf[12]=0x82;	ISOSetBuf[13]=0x42;	ISOSetBuf[14]=0x14;
   ISOSetBuf[15]=0xff;  	ISOSetBuf[16]=0x04;	ISOSetBuf[17]=0xb1;	ISOSetBuf[18]=0x67;	ISOSetBuf[19]=0xc1;
   ISOSetBuf[20]=0x02;  	ISOSetBuf[21]=0x15;	ISOSetBuf[22]=0x0;	ISOSetBuf[23]=0x0;	ISOSetBuf[24]=0x67;
   ISOSetBuf[25]=0xab;  	ISOSetBuf[26]=0xca;	ISOSetBuf[27]=0xd7;	ISOSetBuf[28]=0x1;	ISOSetBuf[29]=0x0;
   ISOSetBuf[30]=0x0;  	ISOSetBuf[31]=0x0;	ISOSetBuf[32]=0xaa;	ISOSetBuf[33]=0x0;	ISOSetBuf[34]=0x1;	ISOControlTransfer(0,0x400,35);
   //set 01
   ISOSetBuf[0]=0x1; 	ISOControlTransfer(0,0x1440,1);

   InitISOEDTD();
}

//Interrupt transfer, use periodic schedule
void InitInterruptList()
{
	char __far *Host_memory_ptr;
   int i;
   u32 Temp;
   char tempData[1]={0};
   //char __far *DataIn;
   
   Host_memory_ptr = (char *)malloc(sizeof(int_data_buf));
	Int_data_buf = (int_data_buf *) Host_memory_ptr;
	for(i=0;i<sizeof(int_data_buf);i++)
		*Host_memory_ptr++ = 0;
   Host_memory_ptr = (char *)malloc(sizeof(166));
   //DataIn = (int_data_buf *) Host_memory_ptr;
	for(i=0;i<166;i++)
		*Host_memory_ptr++ = 0;

	//for usb keyboard
   //Set Configuration1
	OHCI_Set_Configuration(1);

	//Set0x0A
	//Setup Stage
	Ctl_Setup->bmRequestType = 0x21;
	Ctl_Setup->bRequest = 0x0A;
	Ctl_Setup->wValue = 0x0000;
	Ctl_Setup->wIndex = 0x0000;
	Ctl_Setup->wLength = 0x0000;

	ohci_Ctl_TD1->hwINFO = TD_DP_SETUP|TD_T_DATA0|TD_DI;//0x02400000L;
	ohci_Ctl_TD1->hwNextTD = 0;
	ohci_Ctl_TD1->hwCBP = (UpperAddr(Ctl_Setup) << 16) + LowerAddr(Ctl_Setup);
	ohci_Ctl_TD1->hwBE = ohci_Ctl_TD1->hwCBP + sizeof(setup_format) - 1;

	//Status Stage
	ohci_Ctl_TD3->hwINFO = TD_DP_IN|TD_T_DATA1|TD_DI;//0x02480000L;
	ohci_Ctl_TD3->hwNextTD = 0;
	ohci_Ctl_TD3->hwCBP = 0;
	ohci_Ctl_TD3->hwBE = 0;	//Out 0 bytes

	AddingTDtoED(ohci_Ep0, ohci_Ctl_TD3);
	AddingTDtoED(ohci_Ep0, ohci_Ctl_TD1);

	//Set Control_Filled
	Temp = ohci_regs->cmdstatus | OHCI_CLF;
	DWordWrite(&ohci_regs->cmdstatus, Temp);

	do{} while(DoneHeadClear == FALSE);

   //Set0x0A
	//Setup Stage
	Ctl_Setup->bmRequestType = 0x21;
	Ctl_Setup->bRequest = 0x0A;
	Ctl_Setup->wValue = 0x0000;
	Ctl_Setup->wIndex = 0x0001;
	Ctl_Setup->wLength = 0x0000;

	ohci_Ctl_TD1->hwINFO = TD_DP_SETUP|TD_T_DATA0|TD_DI;//0x02400000L;
	ohci_Ctl_TD1->hwNextTD = 0;
	ohci_Ctl_TD1->hwCBP = (UpperAddr(Ctl_Setup) << 16) + LowerAddr(Ctl_Setup);
	ohci_Ctl_TD1->hwBE = ohci_Ctl_TD1->hwCBP + sizeof(setup_format) - 1;

	//Status Stage
	ohci_Ctl_TD3->hwINFO = TD_DP_IN|TD_T_DATA1|TD_DI;//0x02480000L;
	ohci_Ctl_TD3->hwNextTD = 0;
	ohci_Ctl_TD3->hwCBP = 0;
	ohci_Ctl_TD3->hwBE = 0;	//Out 0 bytes

	AddingTDtoED(ohci_Ep0, ohci_Ctl_TD3);
	AddingTDtoED(ohci_Ep0, ohci_Ctl_TD1);

	//Set Control_Filled
	Temp = ohci_regs->cmdstatus | OHCI_CLF;
	DWordWrite(&ohci_regs->cmdstatus, Temp);

	do{} while(DoneHeadClear == FALSE);

   //Set0x09
	//Setup Stage
	Ctl_Setup->bmRequestType = 0x21;
	Ctl_Setup->bRequest = 0x09;
	Ctl_Setup->wValue = 0x0200;
	Ctl_Setup->wIndex = 0x0000;
	Ctl_Setup->wLength = 0x0001;

	ohci_Ctl_TD1->hwINFO = TD_DP_SETUP|TD_T_DATA0|TD_DI;//0x02400000L;
	ohci_Ctl_TD1->hwNextTD = 0;
	ohci_Ctl_TD1->hwCBP = (UpperAddr(Ctl_Setup) << 16) + LowerAddr(Ctl_Setup);
	ohci_Ctl_TD1->hwBE = ohci_Ctl_TD1->hwCBP + sizeof(setup_format) - 1;

   //Data Stage
	ohci_Ctl_TD2->hwINFO = TD_DP_OUT|TD_T_DATA1|TD_DI;//0x03540000L;
	ohci_Ctl_TD2->hwNextTD = 0;
	ohci_Ctl_TD2->hwCBP = (UpperAddr(tempData) << 16) + LowerAddr(tempData);
	ohci_Ctl_TD2->hwBE = ohci_Ctl_TD2->hwCBP;	//Out 1 bytes

	//Status Stage
	ohci_Ctl_TD3->hwINFO = TD_DP_IN|TD_T_DATA1|TD_DI;//0x02480000L;
	ohci_Ctl_TD3->hwNextTD = 0;
	ohci_Ctl_TD3->hwCBP = 0;
	ohci_Ctl_TD3->hwBE = 0;	//Out 0 bytes

	AddingTDtoED(ohci_Ep0, ohci_Ctl_TD3);
   AddingTDtoED(ohci_Ep0, ohci_Ctl_TD2);
	AddingTDtoED(ohci_Ep0, ohci_Ctl_TD1);

	//Set Control_Filled
	Temp = ohci_regs->cmdstatus | OHCI_CLF;
	DWordWrite(&ohci_regs->cmdstatus, Temp);

	do{} while(DoneHeadClear == FALSE);
	///////////////////////////////////////////////////////
	
	//Allocate ED0 format structure
	Host_memory_ptr = (char *)malloc(sizeof(ohci_ed_t)+16);	//sizeof ohci_ed_t + 16
	Host_memory_ptr = (char *) (((unsigned long)Host_memory_ptr + 0xF) & ~0xF);

	ohci_EpInt = (ohci_ed_t *) Host_memory_ptr;

   ohci_EpInt->hwINFO = 0x00080000L|ED_D_TD|ED_EN_1|ED_FA_0|ED_S|0x3;      //low speed, addr=3
	ohci_EpInt->hwTailP = 0;
	ohci_EpInt->hwHeadP = 0;
	ohci_EpInt->hwNextED = 0;

	InsertEmptyTD(ohci_EpInt, ohci_Int_TD0);

   //Init TD1
   //Allocate TD format structure
	Host_memory_ptr = (char *)malloc(sizeof(ohci_td_t)+16);	//sizeof ohci_ed_t + 16
	Host_memory_ptr = (char *) (((unsigned long)Host_memory_ptr + 0xF) & ~0xF);
	ohci_Int_TD1 = (ohci_td_t *) Host_memory_ptr;

   //Data IN Stage
	Int_DataIn = (char *)Int_data_buf;

	ohci_Int_TD1->hwINFO = TD_DP_IN|TD_T_DATA0|TD_R;//0x03540000L;
	ohci_Int_TD1->hwNextTD = 0;
	ohci_Int_TD1->hwCBP = (UpperAddr(Int_DataIn) << 16) + LowerAddr(Int_DataIn);
	ohci_Int_TD1->hwBE = ohci_Int_TD1->hwCBP + 7;	//In 8 bytes

   AddingTDtoED(ohci_EpInt, ohci_Int_TD1);

   //set head pointers for 32ms scheduling lists which start from HCCA
   for(i=0;i<32;i++)
   	ohci_hcca->int_table[i]= (UpperAddr(ohci_EpInt) << 16) + LowerAddr(ohci_EpInt);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -