📄 et21x130c_usb_lib.c
字号:
if(!HTBLL && M_ISBS3(CTR_BUF))
break;
}
while(nHwLength );//&& HTBLL);
HEP0TXCTR = CTR_BUF;
USB_Lib_Delay();
HROMADRH = HTBL;
HROMADRL = LTBL;
return;
}
void fTransmitTable() using USBBANK
{
CTR_BUF = 0;
do
{
_asm
TBRDP _EP0TXDAR
INC _CTR_BUF
_endasm;
nwLength--;
TBLL--;
if(!TBLL || (M_ISBS6(CTR_BUF)) )
break;
}
while(nwLength);//&& HTBLL);
EP0TXCTR = CTR_BUF;
USB_Lib_Delay();
ROMADRH = HTBL;
ROMADRL = LTBL;
return;
}
// SEARCH_CHANGE_PORT
void SearchChangePort() using USBBANK
{
_asm
MOV A,#_HPSR4
ADD A,_HwIndexL
MOV _IAP0,A
_endasm;
return;
}
void StageOne() using USBBANK
{
_asm
MOV A,#_bmRequestType
MOV _IAP0,A
NOP
_endasm;
TEMP_UREG = IAC0;
if(_RequestType_0X00 && (TEMP_UREG==0))
{//. RequestType00
TEMP_UREG = IAC0;
//Clear Feature
if(_RT0X00_Request_0X01 && (TEMP_UREG == request_clear_feature))
{ // ClearRemoteWakeup
if(!(_RT0X00_R0X01_Value0001*_USB_HUB) || M_ISBC1(USB_STATUS))
{
if(IAC0 == device_remote_wakeup)
{
M_BC2(HGSR);
USB_Lib_Delay();
M_BC4(HGSR);
USB_Lib_Delay();
M_BC3(STAINTE);
USB_Lib_Delay();
return;
}
}
}
//Set Feature
else if(_RT0X00_Request_0X03 && (TEMP_UREG == request_set_feature))
{//. SetRemoteWakeup
if(!(_RT0X00_R0X03_Value0001*_USB_HUB) || M_ISBC1(USB_STATUS))
{
if(IAC0 == device_remote_wakeup)
{
M_BS4(HGSR);
USB_Lib_Delay();
M_BS3(STAINTE);
USB_Lib_Delay();
return;
}
}
}
//Set Address
else if(_RT0X00_Request_0X05 && (TEMP_UREG == request_set_address))
{//. SetAddress
if((_USB_HUB) && M_ISBC1(USB_STATUS))
{
ADDRESS_BUFh = IAC0;
return;
}
ADDRESS_BUFf = IAC0;
return;
}
//Set Descriptor
else if(_RT0X00_Request_0X07&& (TEMP_UREG == request_set_descriptor))
{//. SetDescriptor
}
//Set Configuration
else if(_RT0X00_Request_0X09&& (TEMP_UREG == request_set_configuration))
{//. SetConfiguration
if((_USB_HUB) && M_ISBC1(USB_STATUS))
{
// Clear any stall condition
M_BC1(HEP0RXCSR);
USB_Lib_Delay();
M_BC1(HEP0TXCSR);
USB_Lib_Delay();
M_BC1(HEP1TXCSR);
USB_Lib_Delay();
// Load configuration status
if(HwValueL)
{
M_BS5(HGSR);
USB_Lib_Delay();
M_BS5(GCNTR);
USB_Lib_Delay();
}
else
M_BC5(HGSR);
return;
}
else
{//. FcConfiguration
//Embeded fc initilize: interrupt _ENABLE, ep _ENABLE and config
EP1CNTR = _USB_EP1_CON;
USB_Lib_Delay();
EP2CNTR = _USB_EP2_CON;
USB_Lib_Delay();
EP3CNTR = _USB_EP3_CON;
USB_Lib_Delay();
//Clear any stall condition
M_BC1(EP0RXCSR);
USB_Lib_Delay();
M_BC1(EP0TXCSR);
USB_Lib_Delay();
M_BC1(EP1CSR);
USB_Lib_Delay();
M_BC1(EP2CSR);
USB_Lib_Delay();
M_BC1(EP3CSR);
USB_Lib_Delay();
//Load configuration status
if(!wValueL)
{//. fc_un_configured
M_BC4(FC_STATUS);
USB_Lib_Delay();
M_BC0(EP1CSR);
USB_Lib_Delay();
M_BC0(EP2CSR);
USB_Lib_Delay();
M_BC0(EP3CSR);
USB_Lib_Delay();
}
else
{
M_BS4(FC_STATUS);
USB_Lib_Delay();
M_BC0(EP1CSR);
USB_Lib_Delay();
M_BC0(EP2CSR);
USB_Lib_Delay();
M_BC0(EP3CSR);
USB_Lib_Delay();
// call macro _ADD_USB_DEVICE_CONFIG_OK
AddUsbDeviceConfigOk();
}
return;
}
}
}
//. call macro _ADD_USB_RT0X00_Request
//AddUsbRt0x00Request();
else if(_RequestType_0X01 && (TEMP_UREG==1))
{//. RequestType01
if(_RT0X01_Request_0X0B && (IAC0 =request_set_interface))
{//. SetInterface
if(!(_USB_HUB) || M_ISBS1(USB_STATUS))
A_INTERFACE = IAC0;
return;
}
//. call macro _ADD_USB_RT0X01_Request
AddUsbRt0x01Request();
//_ADD_USB_RT0X01_Request
}
else if(_RequestType_0X02 && (TEMP_UREG==2))// == 0x02)
{//. RequestType02
//Clear Feature
if(_RT0X02_Request_0X01)
{
TEMP_UREG = IAC0;
if(TEMP_UREG = request_clear_feature)
{//. ClearEndpointStall
if(_RT0X02_R0X01_Value0000 && (IAC0 = endpoint_stalled))
{
IAP0++;
if(_USB_HUB && M_ISBC1(USB_STATUS))
{
if(IAC0==0)
{//. ClearHEndpointStall00
M_BS1(HEP0RXCSR);
USB_Lib_Delay();
return;
}
else if(IAC0 == hub_endpoint80)
{//. ClearHEndpointStall80
M_BS1(HEP0TXCSR);
USB_Lib_Delay();
return;
}
else if(IAC0 == hub_endpoint81)
{
M_BC1(HEP1TXCSR);
USB_Lib_Delay();
return;
}
}
else
{
usb_byTemp = IAC0;
IAP0--;
switch(usb_byTemp)
{
case 0: //. ClearFEndpointStall00
M_BC1(EP0RXCSR);
USB_Lib_Delay();
return;
case 1: //. ClearFEndpointStall01
if(_USB_EP1)
{
if(_USB_EP1_DIR != _IN_DIR)
{
M_BC1(EP1CSR);
USB_Lib_Delay();
return;
}
}
break;
case 2: //. ClearFEndpointStall02
if(_USB_EP2)
{
if(_USB_EP2_DIR != _IN_DIR)
{
M_BC1(EP2CSR);
USB_Lib_Delay();
return;
}
}
break;
case 3: //. ClearFEndpointStall03
if(_USB_EP3)
{
if(_USB_EP3_DIR != _IN_DIR)
{
M_BC1(EP3CSR);
USB_Lib_Delay();
return;
}
}
break;
case 80: //. ClearFEndpointStall80
M_BC1(EP0TXCSR);
USB_Lib_Delay();
return;
case 81: //. ClearFEndpointStall81
if(_USB_EP1 )
{
if(_USB_EP1_DIR == _IN_DIR)
{
M_BC1(EP1CSR);
USB_Lib_Delay();
return;
}
}
break;
case 82: //. ClearFEndpointStall82
if(_USB_EP2 )
{
if(_USB_EP2_DIR == _IN_DIR)
{
M_BC1(EP2CSR);
USB_Lib_Delay();
return;
}
}
break;
case 83: //. ClearFEndpointStall83
if(_USB_EP3 )
{
if(_USB_EP3_DIR == _IN_DIR)
{
M_BC1(EP3CSR);
USB_Lib_Delay();
return;
}
}
break;
}
}
}
}
}
if(_RT0X02_Request_0X03 &&(TEMP_UREG ==request_set_feature))
{//. SetEndpointStall
if(_RT0X02_R0X03_Value0000 && (IAC0 = endpoint_stalled))
{
IAP0++;
if(_USB_HUB && M_ISBC1(USB_STATUS))
{
if(IAC0==0)
{//. SetHEndpointStall00
M_BS1(HEP0RXCSR);
USB_Lib_Delay();
return;
}
else if(IAC0 == hub_endpoint80)
{//. SetHEndpointStall80
M_BS1(HEP0TXCSR);
USB_Lib_Delay();
return;
}
else if(IAC0 == hub_endpoint81)
{//. SetHEndpointStall81
M_BC1(HEP1TXCSR);
USB_Lib_Delay();
return;
}
}
else
{
usb_byTemp = IAC0;
IAP0--;
switch(usb_byTemp)
{
case 0: //. SetFEndpointStall00
M_BS1(EP0RXCSR);
USB_Lib_Delay();
return;
case 1: //. SetFEndpointStall01
if(_USB_EP1)
{
if(_USB_EP1_DIR != _IN_DIR)
{
M_BS1(EP1CSR);
USB_Lib_Delay();
return;
}
}
break;
case 2: //. SetFEndpointStall02
if(_USB_EP2)
{
if(_USB_EP2_DIR != _IN_DIR)
{
M_BS1(EP2CSR);
USB_Lib_Delay();
return;
}
}
break;
case 3: //. SetFEndpointStall03
if(_USB_EP3)
{
if(_USB_EP3_DIR != _IN_DIR)
{
M_BS1(EP3CSR);
USB_Lib_Delay();
return;
}
}
break;
case 80: //. SetFEndpointStall80
M_BS1(EP0TXCSR);
USB_Lib_Delay();
return;
case 81: //. SetFEndpointStall81
if(_USB_EP1 )
{
if(_USB_EP1_DIR == _IN_DIR)
{
M_BS1(EP1CSR);
USB_Lib_Delay();
return;
}
}
break;
case 82: //. SetFEndpointStall82
if(_USB_EP2 )
{
if(_USB_EP2_DIR == _IN_DIR)
{
M_BS1(EP2CSR);
USB_Lib_Delay();
return;
}
}
break;
case 83: //. ClearFEndpointStall83
if(_USB_EP3 )
{
if(_USB_EP3_DIR == _IN_DIR)
{
M_BS1(EP3CSR);
USB_Lib_Delay();
return;
}
}
break;
}
}
}
}
//. call _ADD_USB_RT0X02_Request
AddUsbRt0x02Request();
}
//. RequestType80
else if(_RequestType_0X80 && (TEMP_UREG==0x80))
{//. Get Status
TEMP_UREG = IAC0;
if(_RT0X80_Request_0X00 && (TEMP_UREG == request_get_status))
{//. GetDeviceStatus
if(_USB_HUB && M_ISBC1(USB_STATUS))
{
HEP0TXCTR = 2;
USB_Lib_Delay();
nHwLength = 0;
/*
HwLengthL = 0;
HwLengthH = 0;
*/
_asm
SHRA _HGSR,3
AND A,#0b00000011
MOV _HEP0TXDAR,A
NOP
NOP
NOP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -