?? et44_usb_lib.inc
字號(hào):
CHECK_PORT4_STATUS:
JBC STATUS_BUF,4,ENABLE_HEP1
MOV A,#HSR+4
MOV IAP0,A
NOP
JBS IAC0,4,NOT_ENABLE_HEP1
ENABLE_HEP1:
BC HEP1TXCSR,SESTALL
N_NOP
BS HEP1TXCSR,RXTXEN
N_NOP
JMP BACK_TO_MLOOP
NOT_ENABLE_HEP1:
MOV A,#16
MOV HEP1_CNT,A
JMP BACK_TO_MLOOP
response_nak:
JBS STATUS_BUF,HSTSC,response_ack
BC HEP1TXCSR,SESTALL
N_NOP
BC HEP1TXCSR,RXTXEN
N_NOP
JMP BACK_TO_MLOOP
//Re-_ENABLE hub EP0 interrupt
next_h_inout:
BC HEP0RXCSR,SESTALL
N_NOP
BC HEP0TXCSR,SESTALL
N_NOP
BS HEP0RXCSR,RXTXEN
N_NOP
BS HEP0TXCSR,RXTXEN
N_NOP
JMP BACK_TO_MLOOP
//***Stall unsupported requests for hub
h_stall:
BS HEP0RXCSR,SESTALL
N_NOP
h_tx_stall: ;V1.8
BS HEP0TXCSR,SESTALL
N_NOP
JMP BACK_TO_MLOOP
//Re-_ENABLE function EP0 interrupt
next_f_inout:
BC EP0RXCSR,SESTALL
N_NOP
BC EP0TXCSR,SESTALL
N_NOP
BS EP0RXCSR,RXTXEN
N_NOP
BS EP0TXCSR,RXTXEN
N_NOP
JMP BACK_TO_MLOOP
//***Stall unsupported requests for function
f_stall:
BS EP0RXCSR,SESTALL
N_NOP
f_tx_stall: ;V1.8
BS EP0TXCSR,SESTALL
N_NOP
JMP BACK_TO_MLOOP
SOF_ISR:
if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
else
CALL USB_INT_PRE
endif
MOV A,#0b10111111
MOV HINTR,A ;SOFINT
N_NOP
_ADD_USB_SOF_INT_SUB
ZCHK HEP1_CNT
JBC STTS,Z,SOF_ISR_1
JMP BACK_TO_MLOOP
SOF_ISR_1:
DJZ HEP1_CNT,ENABLE_HEP1
JMP BACK_TO_MLOOP
//====================================================================================
// Endpoint subroutine
EP1_ISR:
CALL USB_INT_PRE
MOV A,#0b11110111
MOV EPINTR,A
N_NOP
_ADD_USB_EP1_SUB
JMP BACK_TO_MLOOP
EP2_ISR:
CALL USB_INT_PRE
MOV A,#0b11101111
MOV EPINTR,A ;INT2
N_NOP
_ADD_USB_EP2_SUB
JMP BACK_TO_MLOOP
EP3_ISR:
CALL USB_INT_PRE
MOV A,#0b11011111
MOV EPINTR,A ;INT3
N_NOP
_ADD_USB_EP3_SUB
JMP BACK_TO_MLOOP
//====================================================================================
//Control transfer, stage one.
StageOne:
MOV IAP0,A // bmRequestType (HUB & DEVICE)
NOP
MOV A,IAC0
MOV TEMP_UREG,A
//Standard requests
//host to device requests
if _RequestType_0X00 == _ENABLE
XOR A,#0x00
JBS STATUS,Z,RequestType00 //device
endif
if _RequestType_0X01 == _ENABLE
MOV A,#0x01
XOR A,TEMP_UREG
JBS STATUS,Z,RequestType01 //interface
endif
if _RequestType_0X02 == _ENABLE
MOV A,#0x02
XOR A,TEMP_UREG
JBS STATUS,Z,RequestType02 //endpoint
endif
//device to host requests
if _RequestType_0X80 == _ENABLE
MOV A,#0x80
XOR A,TEMP_UREG
JBS STATUS,Z,RequestType80 //device
endif
if _RequestType_0X81 == _ENABLE
MOV A,#0x81
XOR A,TEMP_UREG
JBS STATUS,Z,RequestType81 //interface
endif
if _RequestType_0X82 == _ENABLE
MOV A,#0x82
XOR A,TEMP_UREG
JBS STATUS,Z,RequestType82 //endpoint
endif
//Hub-class requests
//host to device requests
if _RequestType_0X20 == _ENABLE
MOV A,#0x20
XOR A,TEMP_UREG
JBS STATUS,Z,RequestType20 //device
endif
if _RequestType_0X21 == _ENABLE
MOV A,#0x21
XOR A,TEMP_UREG
JBS STATUS,Z,RequestType21 //other
endif
if _RequestType_0X23 == _ENABLE
MOV A,#0x23
XOR A,TEMP_UREG
JBS STATUS,Z,RequestType23 //other
endif
//device to host requests
if _RequestType_0XA0 == _ENABLE
MOV A,#0xA0
XOR A,TEMP_UREG
JBS STATUS,Z,RequestTypeA0 //device
endif
if _RequestType_0XA1 == _ENABLE
MOV A,#0xA1
XOR A,TEMP_UREG
JBS STATUS,Z,RequestTypeA1 //interface
endif
if _RequestType_0XA3 == _ENABLE
MOV A,#0xA3
XOR A,TEMP_UREG
JBS STATUS,Z,RequestTypeA3 //other
endif
Vendorstageone:
_ADD_USB_bmRequestType
JMP UNKNOWN_bRequest
/*==================
Controltransfer, stage two
Decoding
================== */
if _RequestType_0X00 == _ENABLE
RequestType00:
//Clear Feature
MOV A,IAC0 // bRequest
MOV TEMP_UREG,A
if _RT0X00_Request_0X01 == _ENABLE
MOV A,#clear_feature
XOR A,TEMP_UREG
JBS STATUS,Z,ClearRemoteWakeup
endif
//Set Feature
if _RT0X00_Request_0X03 == _ENABLE
MOV A,#set_feature
XOR A,TEMP_UREG
JBS STATUS,Z,SetRemoteWakeup
endif
//Set Address
if _RT0X00_Request_0X05 == _ENABLE
MOV A,#set_address
XOR A,TEMP_UREG
JBS STATUS,Z,SetAddress
endif
//Set Descriptor
if _RT0X00_Request_0X07 == _ENABLE
MOV A,#set_descriptor
XOR A,TEMP_UREG
JBS STTS,Z,SetDescriptor
endif
//Set Configuration
if _RT0X00_Request_0X09 == _ENABLE
MOV A,#set_configuration
XOR A,TEMP_UREG
JBS STATUS,Z,SetConfiguration
endif
endif
_ADD_USB_RT0X00_Request
//else
UNKNOWN_bRequest:
UNKNOWN_wValueL:
UNKNOWN_wIndex:
UNKNOWN_wLength:
UNDEFINE_COMMAND:
BS USB_STATUS,STALL_INDEX
NO_NEED_ANSWER:
RET
if _RequestType_0X01 == _ENABLE
RequestType01:
//Set Interface
if _RT0X01_Request_0X0B == _ENABLE
MOV A,#set_interface // bRequest
XOR A,IAC0
JBS STATUS,Z,SetInterface
endif
_ADD_USB_RT0X01_Request
//else
JMP UNKNOWN_bRequest
endif
if _RequestType_0X02 == _ENABLE
RequestType02:
//Clear Feature
if _RT0X02_Request_0X01 == _ENABLE
MOV A,IAC0 // bRequest
MOV TEMP_UREG,A
MOV A,#clear_feature
XOR A,TEMP_UREG
JBS STATUS,Z,ClearEndpointStall
endif
//Set Feature
if _RT0X02_Request_0X03 == _ENABLE
MOV A,#set_feature
XOR A,TEMP_UREG
JBS STATUS,Z,SetEndpointStall
endif
_ADD_USB_RT0X02_Request
//else
JMP UNKNOWN_bRequest
endif
if _RequestType_0X80 == _ENABLE
RequestType80:
//Get Status
MOV A,IAC0 // bRequest
MOV TEMP_UREG,A
if _RT0X80_Request_0X00 == _ENABLE
MOV A,#get_status
XOR A,TEMP_UREG
JBS STATUS,Z,GetDeviceStatus
endif
//Get Descriptor
if _RT0X80_Request_0X06 == _ENABLE
MOV A,#get_descriptor
XOR A,TEMP_UREG
JBS STATUS,Z,GetDescriptor
endif
//Configuration
if _RT0X80_Request_0X08 == _ENABLE
MOV A,#get_configuration
XOR A,TEMP_UREG
JBS STATUS,Z,GetConfiguration
endif
_ADD_USB_RT0X80_Request
//else
JMP UNKNOWN_bRequest
endif
if _RequestType_0X81 == _ENABLE
RequestType81:
//Get Status
MOV A,IAC0 // bRequest
MOV TEMP_UREG,A
if _RT0X81_Request_0X00 == _ENABLE
MOV A,#get_status
XOR A,TEMP_UREG
JBS STATUS,Z,GetInterfaceStatus
endif
//Get Descriptor
if _RT0X81_Request_0X06 == _ENABLE
MOV A,#get_descriptor
XOR A,TEMP_UREG
JBS STTS,Z,HID_report_descriptor
endif
//Get Interface
if _RT0X81_Request_0X0A == _ENABLE
MOV A,#get_interface
XOR A,TEMP_UREG
JBS STATUS,Z,GetInterface
endif
_ADD_USB_RT0X81_Request
//else
JMP UNKNOWN_bRequest
endif
if _RequestType_0X82 == _ENABLE
RequestType82:
//Get Status
if _RT0X82_Request_0X00 == _ENABLE
MOV A,#get_status // bRequest
XOR A,IAC0
JBS STATUS,Z,GetEndpointStatus
endif
_ADD_USB_RT0X82_Request
//else
JMP UNKNOWN_bRequest
endif
if _RequestType_0X20 == _ENABLE
RequestType20:
//Clear Feature
MOV A,IAC0 // bRequest
MOV TEMP_UREG,A
if _RT0X20_Request_0X01 == _ENABLE
MOV A,#clear_feature
XOR A,TEMP_UREG
JBS STATUS,Z,ClearHubFeature
endif
//Set Feature
if _RT0X20_Request_0X03 == _ENABLE
MOV A,#set_feature
XOR A,TEMP_UREG
JBS STATUS,Z,SetHubFeature
endif
//Set Descriptor
if _RT0X20_Request_0X06 == _ENABLE
MOV A,#set_descriptor
XOR A,TEMP_UREG
JBS STATUS,Z,SetHubDescriptor
endif
_ADD_USB_RT0X20_Request
//else
JMP UNKNOWN_bRequest
endif
if _RequestType_0X21 == _ENABLE
RequestType21:
//Set Report
MOV A,IAC0 // bRequest
MOV TEMP_UREG,A
if _RT0X21_Request_0X09 == _ENABLE
MOV A,#set_report
XOR A,TEMP_UREG
JBS STATUS,Z,SetReport
endif
//Set Idle
if _RT0X21_Request_0X0A == _ENABLE
MOV A,#set_idle
XOR A,TEMP_UREG
JBS STATUS,Z,SetIdleReport
endif
//Set Protocol
if _RT0X21_Request_0X0B == _ENABLE
MOV A,#set_protocol;
XOR A,TEMP_UREG
JBS STATUS,Z,SetProtocolReport
endif
_ADD_USB_RT0X21_Request
//else
JMP UNKNOWN_bRequest
endif
if _RequestType_0X23 == _ENABLE
RequestType23:
//Clear Feature
MOV A,IAC0 // bRequest
MOV TEMP_UREG,A
if _RT0X23_Request_0X01 == _ENABLE
MOV A,#clear_feature
XOR A,TEMP_UREG
JBS STATUS,Z,ClearPortFeature
endif
//Set Feature
if _RT0X23_Request_0X03 == _ENABLE
MOV A,#set_feature
XOR A,TEMP_UREG
JBS STATUS,Z,SetPortFeature
endif
_ADD_USB_RT0X23_Request
//else
JMP UNKNOWN_bRequest
endif
if _RequestType_0XA0 == _ENABLE
RequestTypeA0:
//Get Status
MOV A,IAC0 // bRequest
MOV TEMP_UREG,A
if _RT0XA0_Request_0X00 == _ENABLE
MOV A,#get_status
XOR A,TEMP_UREG
JBS STATUS,Z,GetHubStatus
endif
//Get Descriptor
if _RT0XA0_Request_0X06 == _ENABLE
MOV A,#get_descriptor
XOR A,TEMP_UREG
JBS STATUS,Z,GetHubDescriptor
endif
_ADD_USB_RT0XA0_Request
//else
JMP UNKNOWN_bRequest
endif
if _RequestType_0XA1 == _ENABLE
RequestTypeA1:
//Get Report
MOV A,IAC0 // bRequest
MOV TEMP_UREG,A
if _RT0XA1_Request_0X01 == _ENABLE
MOV A,#get_report
XOR A,TEMP_UREG
JBS STATUS,Z,GetReport
endif
//Get Idle
if _RT0XA1_Request_0X02 == _ENABLE
MOV A,#get_idle
XOR A,TEMP_UREG
JBS STATUS,Z,GetIdleReport
endif
//Get Protocol
if _RT0XA1_Request_0X03 == _ENABLE
MOV A,#get_protocol
XOR A,TEMP_UREG
JBS STATUS,Z,GetProtocolReport
endif
_ADD_USB_RT0XA1_Request
//else
JMP UNKNOWN_bRequest
endif
if _RequestType_0XA3 == _ENABLE
RequestTypeA3:
//Get Status
MOV A,IAC0 // bRequest
MOV TEMP_UREG,A
if _RT0XA3_Request_0X00 == _ENABLE
MOV A,#get_status
XOR A,TEMP_UREG
JBS STATUS,Z,GetPortStatus
endif
//Get State
if _RT0XA3_Request_0X02 == _ENABLE
MOV A,#get_state
XOR A,TEMP_UREG
JBS STATUS,Z,GetBusState
endif
_ADD_USB_RT0XA3_Request
//else
JMP UNKNOWN_bRequest
endif
/*===================
Control transfer, stage three
Process the request
=================== */
//Standard
if _RT0X00_Request_0X01 == _ENABLE
ClearRemoteWakeup:
JBS USB_STATUS,HorF,F_CRWup
if _RT0X00_R0X01_Value0001*_USB_HUB == _ENABLE
MOV A,#device_remote_wakeup
XOR A,IAC0 ;wValueL
JBC STATUS,Z,UNKNOWN_wValueL
CRWup_SAME:
BC HGSR,suspend
N_NOP
BC HGSR,RMWUPEN
N_NOP
BC STAINTE,FRWPINT
N_NOP
RET
endif
F_CRWup:
MOV A,#device_remote_wakeup
XOR A,IAC0 ;wValueL
JBC STATUS,Z,UNKNOWN_wValueL
FCRWup_SAME:
BC GCNTR,SUSPEND
N_NOP
BC STAINTE,IDLEINTE
N_NOP
; BC STAINTE,FRWPINT
; N_NOP
if _USB_HUB == _ENABLE
BC HGSR,RMWUPEN
N_NOP
else
BC USB_STATUS,REWUP_FLAG
endif
RET
endif
if _RT0X00_Request_0X03 == _ENABLE
SetRemoteWakeup:
JBS USB_STATUS,HorF,F_SRWup
if _RT0X00_R0X03_Value0001*_USB_HUB == _ENABLE
MOV A,#device_remote_wakeup
XOR A,IAC0 ;wValueL;NOT IAP0 020924 I.6
JBC STATUS,Z,UNKNOWN_wValueL
SRWup_SAME:
BS HGSR,RMWUPEN
N_NOP
BS STAINTE,FRWPINT
N_NOP
NOT_DEVICE:
RET
endif
F_SRWup:
MOV A,#device_remote_wakeup
XOR A,IAC0 ;wValueL;NOT IAP0 020924 I.6
JBC STATUS,Z,UNKNOWN_wValueL
FSRWup_SAME:
mov a,#0b11110000
mov STAINTr,a
N_NOP
; BS HGSR,RMWUPEN
BS STAINTE,IDLEINTE
N_NOP
; BS STAINTE,FRWPINT
; N_NOP
if _USB_HUB == _ENABLE
BS HGSR,RMWUPEN
N_NOP
else
BS USB_STATUS,REWUP_FLAG
endif
RET
endif
if _RT0X02_R0X01_Value0000 == _ENABLE
ClearEndpointStall:
MOV A,#endpoint_stalled
XOR A,IAC0 ;wValueL
JBC STATUS,Z,UNKNOWN_wValueL
INC IAP0 ;wIndexL
JBS USB_STATUS,HorF,ClearFunctionStall
if _USB_HUB == _ENABLE
//Clear any stall condition
MOV A,IAC0
JBS STTS,Z,ClearHEndpointStall00
XOR A,#hub_endpoint80
JBS STTS,Z,ClearHEndpointStall80
XOR A,#hub_endpoint81-hub_endpoint80
JBC STTS,Z,UNDEFINE_COMMAND
ClearHEndpointStall81:
BC HEP1TXCSR,SESTALL
ClearHEndpointStall_END:
N_NOP
endif
RET
if _USB_HUB == _ENABLE
ClearHEndpointStall00:
BC HEP0RXCSR,SESTALL
JMP ClearHEndpointStall_END
ClearHEndpointStall80:
BC HEP0TXCSR,SESTALL
JMP ClearHEndpointStall_END
endif
ClearFunctionStall:
MOV A,IAC0
DEC IAP0
AND A,#0b00000011
ADD A,#0x01
ClearFEndpointStall_R:
JBC IAC0,7,$+3
ClearFEndpointStall_T:
ADD A,#0x04
TBL
JMP ClearFEndpointStall00
JMP ClearFEndpointStall01
JMP ClearFEndpointStall02
JMP ClearFEndpointStall03
JMP ClearFEndpointStall80
JMP ClearFEndpointStall81
JMP ClearFEndpointStall82
ClearFEndpointStall83:
if _USB_EP3 == _ENABLE
if _USB_EP3_DIR == _OUT_DIR
JMP UNDEFINE_COMMAND
else
BC EP3CSR,SESTALL
JMP ClearFEndpointStall_END
endif
else
JMP UNDEFINE_COMMAND
endif
ClearFEndpointStall03:
if _USB_EP3 == _ENABLE
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -