?? et_easy_usb_bulk_usb_lib.c
字號:
void Int_Hint0Txe() interrupt INT_HINT0TXE using USBBANK
{
if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
UsbIntPre();
if(M_ISBS1(HINTR))
{//. HTX0_ISR1
HINTR = 253;
M_NOP;
HAR = ADDRESS_BUFh;
M_NOP;
//. skip_hub_address_set
if(!HTBLL)
{//. exit_htx0
HEP0TXCTR = 0;
M_NOP;
}
else if(HwLengthL)
{//. skip_hub_address_set1
nTable = nRomAdr;
M_NOP;
HubTransmitTable();
}
else if(!HwLengthH)
{//. exit_htx0
HEP0TXCTR = 0;
M_NOP;
}
}
else
{//. HTX1_ISR
M_BC1(HEP1TXCSR);
M_NOP;
if(M_ISBS3(HUB_STATUS))
{
M_BC0(HEP1TXCSR);
}
else
{//. not_cleared_yet
M_BS0(HEP1TXCSR);
}
M_NOP;
HINTR = 247;//#0b11110111
M_NOP;
goto Back_To_Mloop;
}
Next_H_Inout:
M_BC1(HEP0RXCSR);
M_NOP;
M_BC1(HEP0TXCSR);
M_NOP;
M_BC0(HEP0RXCSR);
M_NOP;
M_BC0(HEP0TXCSR);
M_NOP;
Back_To_Mloop:
if(_USB_AUTO_STORE_IAP0)
{
IAP0=STACK_IAP0;
M_NOP;
}
if(_USB_DIS_ANO_INT)
M_ENI;
return;
}
//. HPSTSC_ISR
void Int_HpstscInte() interrupt INT_HPSTSCINTE using USBBANK
{
if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
UsbIntPre();
M_BC3(HUB_STATUS);
HINTR = 127; //#0b01111111
M_NOP;
if(12 & HSR) //#0b00001100
M_BS0(STATUS_BUF);
if(31 & HPSCR1)//#0b00011111
M_BS1(STATUS_BUF);
if(31 & HPSCR2)//#0b00011111
M_BS2(STATUS_BUF);
if(31 & HPSCR3)//#0b00011111
M_BS3(STATUS_BUF);
if(31 & HPSCR4)//#0b00011111
M_BS4(STATUS_BUF);
if(!(30 & STATUS_BUF) && M_ISBC0(STATUS_BUF))//#0b00011110
{//. response_nak
// if(M_ISBC0(STATUS_BUF))
{
M_BC1(HEP1TXCSR);
M_NOP;
M_BC0(HEP1TXCSR);
M_NOP;
goto Back_To_Mloop;
}
}
_asm
MOV _HEP1TXDAR,A
_endasm;
M_NOP;
//. CHECK_PORT1_STATUS
if(M_ISBS1(STATUS_BUF))
{
_asm
MOV A,#_HSR+1
MOV _IAP0,A
NOP
_endasm;
if(M_ISBS4(IAC0))
goto NOT_ENABLE_HEP1;
}
if(M_ISBS1(STATUS_BUF))
{
_asm
MOV A,#_HSR+2
MOV _IAP0,A
NOP
_endasm;
if(M_ISBS4(IAC0))
goto NOT_ENABLE_HEP1;
}
if(M_ISBS1(STATUS_BUF))
{
_asm
MOV A,#_HSR+3
MOV _IAP0,A
NOP
_endasm;
if(M_ISBS4(IAC0))
goto NOT_ENABLE_HEP1;
}
if(M_ISBS1(STATUS_BUF))
{
_asm
MOV A,#_HSR+4
MOV _IAP0,A
NOP
_endasm;
if(M_ISBS4(IAC0))
goto NOT_ENABLE_HEP1;
}
M_BC1(HEP1TXCSR);
M_NOP;
M_BC0(HEP1TXCSR);
M_NOP;
goto Back_To_Mloop;
//. NOT_ENABLE_HEP1
NOT_ENABLE_HEP1:
HEP1_CNT = 16;
Back_To_Mloop:
if(_USB_AUTO_STORE_IAP0)
{
IAP0=STACK_IAP0;
M_NOP;
}
if(_USB_DIS_ANO_INT)
M_ENI;
return;
}
//. SOF_ISR
void Int_SofInte() interrupt INT_SOFINTE using USBBANK
{
if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
UsbIntPre();
HINTR = 191;//#0b10111111
M_NOP;
//. call macro _ADD_USB_SOF_INT_SUB
AddUsbSof();
if(HEP1_CNT)
{
if(--HEP1_CNT)
{//. ENABLE_HEP1
M_BC1(HEP1TXCSR);
M_NOP;
M_BS0(HEP1TXCSR);
M_NOP;
}
}
Back_To_Mloop:
if(_USB_AUTO_STORE_IAP0)
{
IAP0=STACK_IAP0;
M_NOP;
}
if(_USB_DIS_ANO_INT)
M_ENI;
return;
}
void HubTransmitTable() using USBBANK
{
CTR_BUF = 0;
do
{
_asm
TBRDP _HEP0TXDAR
INC _CTR_BUF
_endasm;
nHwLength--;
HTBLL--;
if(!HTBLL && M_ISBS3(CTR_BUF))
break;
}
while(nHwLength );//&& HTBLL);
HEP0TXCTR = CTR_BUF;
M_NOP;
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;
M_NOP;
ROMADRH = HTBL;
ROMADRL = LTBL;
return;
/*
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;
M_NOP;
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
{
// unsigned char temp;
_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_ISBS1(USB_STATUS))
{//. F_CRWup
goto UNKNOWN_wValueL;
}
*/
if(!(_RT0X00_R0X01_Value0001*_USB_HUB) || M_ISBC1(USB_STATUS))
{
if(IAC0 == device_remote_wakeup)
{
M_BC2(HGSR);
M_NOP;
M_BC4(HGSR);
M_NOP;
M_BC3(STAINTE);
M_NOP;
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);
M_NOP;
M_BS3(STAINTE);
M_NOP;
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);
M_NOP;
M_BC1(HEP0TXCSR);
M_NOP;
M_BC1(HEP1TXCSR);
M_NOP;
// Load configuration status
if(HwValueL)
{
M_BS5(HGSR);
M_NOP;
M_BS5(GCNTR);
M_NOP;
}
else
M_BC5(HGSR);
return;
}
else
{//. FcConfiguration
//Embeded fc initilize: interrupt _ENABLE, ep _ENABLE and config
EP1CNTR = _USB_EP1_CON;
M_NOP;
EP2CNTR = _USB_EP2_CON;
M_NOP;
EP3CNTR = _USB_EP3_CON;
M_NOP;
//Clear any stall condition
M_BC1(EP0RXCSR);
M_NOP;
M_BC1(EP0TXCSR);
M_NOP;
M_BC1(EP1CSR);
M_NOP;
M_BC1(EP2CSR);
M_NOP;
M_BC1(EP3CSR);
M_NOP;
//Load configuration status
if(!wValueL)
{//. fc_un_configured
M_BC4(FC_STATUS);
M_NOP;
M_BC0(EP1CSR);
M_NOP;
M_BC0(EP2CSR);
M_NOP;
M_BC0(EP3CSR);
M_NOP;
}
else
{
M_BS4(FC_STATUS);
M_NOP;
M_BC0(EP1CSR);
M_NOP;
M_BC0(EP2CSR);
M_NOP;
M_BC0(EP3CSR);
M_NOP;
// 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);
M_NOP;
return;
}
else if(IAC0 == hub_endpoint80)
{//. ClearHEndpointStall80
M_BS1(HEP0TXCSR);
M_NOP;
return;
}
else if(IAC0 == hub_endpoint81)
{
M_BC1(HEP1TXCSR);
M_NOP;
return;
}
}
else
{
usb_byTemp = IAC0;
IAP0--;
switch(usb_byTemp)
{
case 0: //. ClearFEndpointStall00
M_BC1(EP0RXCSR);
M_NOP;
return;
case 1: //. ClearFEndpointStall01
if(_USB_EP1)
{
if(_USB_EP1_DIR != _IN_DIR)
{
M_BC1(EP1CSR);
M_NOP;
return;
}
}
break;
case 2: //. ClearFEndpointStall02
if(_USB_EP2)
{
if(_USB_EP2_DIR != _IN_DIR)
{
M_BC1(EP2CSR);
M_NOP;
return;
}
}
break;
case 3: //. ClearFEndpointStall03
if(_USB_EP3)
{
if(_USB_EP3_DIR != _IN_DIR)
{
M_BC1(EP3CSR);
M_NOP;
return;
}
}
break;
case 80: //. ClearFEndpointStall80
M_BC1(EP0TXCSR);
M_NOP;
return;
case 81: //. ClearFEndpointStall81
if(_USB_EP1 )
{
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -