📄 ohcihcd.bak
字号:
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 + -