📄 usb_lib.inc
字号:
ClearFEndpointStall_END:
N_NOP
RET
ClearFEndpointStall00:
BC EP0RXCSR,SESTALL
JMP ClearFEndpointStall_END
ClearFEndpointStall80:
BC EP0TXCSR,SESTALL
JMP ClearFEndpointStall_END
ClearFEndpointStall01:
if _USB_EP1 == _ENABLE
if _USB_EP1_DIR == _IN_DIR
JMP UNDEFINE_COMMAND
else
BC EP1CSR,SESTALL
JMP ClearFEndpointStall_END
endif
else
JMP UNDEFINE_COMMAND
endif
ClearFEndpointStall81:
if _USB_EP1 == _ENABLE
if _USB_EP1_DIR == _OUT_DIR
JMP UNDEFINE_COMMAND
else
BC EP1CSR,SESTALL
JMP ClearFEndpointStall_END
endif
else
JMP UNDEFINE_COMMAND
endif
ClearFEndpointStall02:
if _USB_EP2 == _ENABLE
if _USB_EP2_DIR == _IN_DIR
JMP UNDEFINE_COMMAND
else
BC EP2CSR,SESTALL
JMP ClearFEndpointStall_END
endif
else
JMP UNDEFINE_COMMAND
endif
ClearFEndpointStall82:
if _USB_EP2 == _ENABLE
if _USB_EP2_DIR == _OUT_DIR
JMP UNDEFINE_COMMAND
else
BC EP2CSR,SESTALL
JMP ClearFEndpointStall_END
endif
else
JMP UNDEFINE_COMMAND
endif
endif
if _RT0X02_R0X03_Value0000 == _ENABLE
SetEndpointStall:
MOV A,#endpoint_stalled
XOR A,IAC0 ;wValueL
JBC STATUS,Z,UNKNOWN_wValueL
INC IAP0 ;wIndexL
JBS USB_STATUS,HorF,SetFunctionStall
if _USB_HUB == _ENABLE
//Set any stall condition
MOV A,IAC0
JBS STTS,Z,SetHEndpointStall00
XOR A,#hub_endpoint80
JBS STTS,Z,SetHEndpointStall80
XOR A,#hub_endpoint81-hub_endpoint80
JBC STTS,Z,UNDEFINE_COMMAND
SetHEndpointStall81:
BS HEP1TXCSR,SESTALL
SetHEndpointStall_END:
N_NOP
endif
RET
if _USB_HUB == _ENABLE
SetHEndpointStall80:
BS HEP0TXCSR,SESTALL
JMP SetHEndpointStall_END
SetHEndpointStall00:
BS HEP0RXCSR,SESTALL
JMP SetHEndpointStall_END
endif
SetFunctionStall:
MOV A,IAC0
DEC IAP0
AND A,#0b00000011
ADD A,#0x01
SetFEndpointStall_R:
JBC IAC0,7,$+3
SetFEndpointStall_T:
ADD A,#0x04
TBL
JMP SetFEndpointStall00
JMP SetFEndpointStall01
JMP SetFEndpointStall02
JMP SetFEndpointStall03
JMP SetFEndpointStall80
JMP SetFEndpointStall81
JMP SetFEndpointStall82
SetFEndpointStall83:
if _USB_EP3 == _ENABLE
if _USB_EP3_DIR == _OUT_DIR
JMP UNDEFINE_COMMAND
else
BS EP3CSR,SESTALL
JMP SetFEndpointStall_END
endif
else
JMP UNDEFINE_COMMAND
endif
SetFEndpointStall03:
if _USB_EP3 == _ENABLE
if _USB_EP3_DIR == _IN_DIR
JMP UNDEFINE_COMMAND
else
BS EP3CSR,SESTALL
JMP SetFEndpointStall_END
endif
else
JMP UNDEFINE_COMMAND
endif
SetFEndpointStall_END:
N_NOP
RET
SetFEndpointStall00:
BS EP0RXCSR,SESTALL
JMP SetFEndpointStall_END
SetFEndpointStall80:
BS EP0TXCSR,SESTALL
JMP SetFEndpointStall_END
SetFEndpointStall01:
if _USB_EP1 == _ENABLE
if _USB_EP1_DIR == _IN_DIR
JMP UNDEFINE_COMMAND
else
BS EP1CSR,SESTALL
JMP SetFEndpointStall_END
endif
else
JMP UNDEFINE_COMMAND
endif
SetFEndpointStall81:
if _USB_EP1 == _ENABLE
if _USB_EP1_DIR == _OUT_DIR
JMP UNDEFINE_COMMAND
else
BS EP1CSR,SESTALL
JMP SetFEndpointStall_END
endif
else
JMP UNDEFINE_COMMAND
endif
SetFEndpointStall02:
if _USB_EP2 == _ENABLE
if _USB_EP2_DIR == _IN_DIR
JMP UNDEFINE_COMMAND
else
BS EP2CSR,SESTALL
JMP SetFEndpointStall_END
endif
else
JMP UNDEFINE_COMMAND
endif
SetFEndpointStall82:
if _USB_EP2 == _ENABLE
if _USB_EP2_DIR == _OUT_DIR
JMP UNDEFINE_COMMAND
else
BS EP2CSR,SESTALL
JMP SetFEndpointStall_END
endif
else
JMP UNDEFINE_COMMAND
endif
endif
SetAddress:
MOV A,IAC0 ;wValueL
if _USB_HUB == _ENABLE
JBS USB_STATUS,HorF,FcSetAddress
MOV ADDRESS_BUFh,A
RET
endif
FcSetAddress:
MOV ADDRESS_BUFf,A
RET
SetConfiguration:
if _USB_HUB == _ENABLE
JBS USB_STATUS,HorF,FcConfiguration
//Clear any stall condition
BC HEP0RXCSR,SESTALL
N_NOP
BC HEP0TXCSR,SESTALL
N_NOP
BC HEP1TXCSR,SESTALL
N_NOP
//Load configuration status
ZCHK HwValueL
JBS STATUS,Z,hub_un_configured
//device configured
BS HGSR,CONFG
N_NOP
BS GCNTR,FUNEN ;_ENABLE EMBEDDED FUNCTION
N_NOP
RET
//device un-configured
hub_un_configured:
BC HGSR,CONFG
N_NOP
RET
endif
FcConfiguration:
//Embeded fc initilize: interrupt _ENABLE, ep _ENABLE and config
MOV A,#_USB_EP1_CON
MOV EP1CNTR,A
N_NOP
MOV A,#_USB_EP2_CON
MOV EP2CNTR,A
N_NOP
MOV A,#_USB_EP3_CON
MOV EP3CNTR,A
N_NOP
//Clear any stall condition
BC EP0RXCSR,SESTALL
N_NOP
BC EP0TXCSR,SESTALL
N_NOP
BC EP1CSR,SESTALL
N_NOP
BC EP2CSR,SESTALL
N_NOP
BC EP3CSR,SESTALL
N_NOP
//Load configuration status
ZCHK wValueL
JBS STATUS,Z,fc_un_configured
//device configured
BS FC_STATUS,CONFIG_INDEX
BC EP1CSR,RXTXEN
N_NOP
BC EP2CSR,RXTXEN
N_NOP
BC EP3CSR,RXTXEN
N_NOP
_ADD_USB_DEVICE_CONFIG_OK
; BS HINTE,SOFINT
; N_NOP
RET
//device un-configured
fc_un_configured:
BC FC_STATUS,CONFIG_INDEX
N_NOP
BC EP1CSR,RXTXEN
N_NOP
BC EP2CSR,RXTXEN
N_NOP
BC EP3CSR,RXTXEN
N_NOP
RET
GetConfiguration:
if _USB_HUB == _ENABLE
JBS USB_STATUS,HorF,GetFcConfig
//check hub configuration
MOV A,#0x01
MOV HEP0TXCTR,A
N_NOP
CLR HwLengthL
CLR HwLengthH
MOV A,#0x01
JBS HGSR,CONFG,get_config_1
MOV A,#0x00
get_config_1:
MOV HEP0TXDAR,A
N_NOP
RET
endif
GetFcConfig:
//check fc configuration
MOV A,#0x01
MOV EP0TXCTR,A
N_NOP
CLR wLengthL
CLR wLengthH
MOV A,#0x01
JBS FC_STATUS,CONFIG_INDEX,get_fc_config_1
MOV A,#0x00
get_fc_config_1:
MOV EP0TXDAR,A
N_NOP
RET
GetDescriptor:
INC IAP0
NOP
MOV A,IAC0 ;wValueH
MOV TEMP_UREG,A
if _RT0X80_R0X06_Value0100 == _ENABLE
MOV A,#device
XOR A,TEMP_UREG
JBS STATUS,Z,GetDeviceDescriptor
endif
if _RT0X80_R0X06_Value0200 == _ENABLE
MOV A,#configuration
XOR A,TEMP_UREG
JBS STATUS,Z,GetConfigDescriptor
endif
//for embeded function
if _RT0X80_R0X06_Value0300 == _ENABLE
MOV A,#string
XOR A,TEMP_UREG
JBS STTS,Z,STRING_COMMAND
endif
//else, stall
JMP UNKNOWN_wValueL
GetDeviceDescriptor:
if _USB_HUB == _ENABLE
JBS USB_STATUS,HorF,FcDeviceDescriptor
MOV A,#High(Hub_device_desc_table<<1)
MOV TBHPTR,A
MOV A,#Low(Hub_device_desc_table<<1)
MOV TBLPTR,A
JMP H_TABLE_READ
endif
FcDeviceDescriptor:
MOV A,#High(Fc_device_desc_table<<1)
MOV TBHPTR,A
MOV A,#Low(Fc_device_desc_table<<1)
MOV TBLPTR,A
JMP F_TABLE_READ
if _USB_HUB == _ENABLE
H_TABLE_READ:
NOP
NOP
TBRD HTBLL
CALL hTransmitTable
RET
endif
F_TABLE_READ:
NOP
NOP
TBRD TBLL
F_TABLE_READ_1:
CALL fTransmitTable
RET
GetConfigDescriptor:
if _USB_HUB == _ENABLE
JBS USB_STATUS,HorF,FcConfigDescriptor
MOV A,#High(Hub_config_desc_table<<1)
MOV TBHPTR,A
MOV A,#Low(Hub_config_desc_table<<1)
MOV TBLPTR,A
JMP HGetConfigDesc_1
endif
FcConfigDescriptor:
MOV A,#High(Fc_config_desc_table<<1)
MOV TBHPTR,A
MOV A,#Low(Fc_config_desc_table<<1)
MOV TBLPTR,A
JMP FGetConfigDesc_1
if _USB_HUB == _ENABLE
HGetConfigDesc_1:
CALL HF_USB_TABLE_ADD
TBRD HTBLL
CALL HF_USB_TABLE_SUB
CALL hTransmitTable
RET
endif
FGetConfigDesc_1:
CALL HF_USB_TABLE_ADD
TBRD TBLL
CALL HF_USB_TABLE_SUB
CALL fTransmitTable
RET
HF_USB_TABLE_ADD:
MOV A,#0x02
ADD TBLPTR,A
JBC STTS,C,$+3
INC TBHPTR
NOP
RET
HF_USB_TABLE_SUB:
SUB TBLPTR,A
JBS STTS,Z,$+5
JBS STTS,C,$+3
DEC TBHPTR
RET
GetDeviceStatus:
if _USB_HUB == _ENABLE
JBS USB_STATUS,HorF,GetFcDeviceStatus
MOV A,#2
MOV HEP0TXCTR,A
N_NOP
CLR HwLengthL
CLR HwLengthH
//??????????????
SHRA HGSR,3
AND A,#0b00000011
MOV HEP0TXDAR,A
N_NOP
MOV A,#0b00000000
MOV HEP0TXDAR,A
N_NOP
RET
endif
GetFcDeviceStatus:
MOV A,#2
MOV EP0TXCTR,A
N_NOP
CLR wLengthL
CLR wLengthH
if _USB_HUB == _ENABLE
SHRA HGSR,3
AND A,#0b00000011
else
MOV A,#_USB_CD_bmAttributes
AND A,#0b01000000
MOV A,#0x00
JBS STTS,Z,$+3
MOV A,#0x01
JBC USB_STATUS,REWUP_FLAG,$+3
OR A,#0b00000010
endif
MOV EP0TXDAR,A
N_NOP
MOV A,#0b00000000
MOV EP0TXDAR,A
N_NOP
RET
GetInterfaceStatus:
if _USB_HUB == _ENABLE
JBS USB_STATUS,HorF,GetFcInterfaceStatus
MOV A,HwLengthL
; MOV A,#2
MOV HEP0TXCTR,A
N_NOP
MOV A,#0x00
MOV HEP0TXDAR,A
N_NOP
DEC HwLengthL
JBS STTS,Z,GetInterfaceStatus_END
MOV A,#0x00
MOV HEP0TXDAR,A
N_NOP
GetInterfaceStatus_END:
CLR HwLengthL
CLR HwLengthH
RET
endif
GetFcInterfaceStatus:
MOV A,wLengthL
; MOV A,#2
MOV EP0TXCTR,A
N_NOP
MOV A,#0x00
MOV EP0TXDAR,A
N_NOP
DEC wLengthL
JBS STTS,Z,GetFcInterfaceStatus_END
MOV A,#0x00
MOV EP0TXDAR,A
N_NOP
GetFcInterfaceStatus_END:
CLR wLengthL
CLR wLengthH
RET
GetEndpointStatus:
if _USB_HUB == _ENABLE
JBS USB_STATUS,HorF,GetFcEndpointStatus
//get hub endpoint status
MOV A,#HEP0RXCSR
MOV IAP0,A ;HEP0RXCSR
MOV A,HwIndexL
JBS STATUS,Z,get_hub_ep_st
INC IAP0 ;HEP0TXCSR
XOR A,#hub_endpoint80
JBS STATUS,Z,get_hub_ep_st
INC IAP0 ;HEP1TXCSR
XOR A,#hub_endpoint81-hub_endpoint80
JBC STATUS,Z,UNDEFINE_COMMAND
get_hub_ep_st:
MOV A,#0x02 ;0x01 020924 I.5
MOV HEP0TXCTR,A
N_NOP
CLR HwLengthL
CLR HwLengthH
MOV A,#0x01
JBS IAC0,SESTALL,hep1_susp
MOV A,#0x00
hep1_susp:
MOV HEP0TXDAR,A
N_NOP
MOV A,#0x00
MOV HEP0TXDAR,A
N_NOP ;>
RET
endif
GetFcEndpointStatus:
//check function endpoint 1
MOV A,WIndexL
AND A,#0x03
ADD A,#0x01
JBC WIndexL,7,$+3
ADD A,#0x04
TBL
JMP check_fc_ep00
JMP check_fc_ep01
JMP check_fc_ep02
JMP check_fc_ep03
JMP check_fc_ep80
JMP check_fc_ep81
JMP check_fc_ep82
check_fc_ep83:
if _USB_EP3 == _ENABLE
if _USB_EP3_DIR == _OUT_DIR
JMP UNDEFINE_COMMAND
else
MOV A,#EP3CSR
JMP check_fc_end
endif
else
JMP UNDEFINE_COMMAND
endif
check_fc_ep03:
if _USB_EP3 == _ENABLE
if _USB_EP3_DIR == _IN_DIR
JMP UNDEFINE_COMMAND
else
MOV A,#EP3CSR
JMP check_fc_end
endif
else
JMP UNDEFINE_COMMAND
endif
check_fc_ep00:
MOV A,#EP0TXCSR
JMP check_fc_end
check_fc_ep01:
if _USB_EP1 == _ENABLE
if _USB_EP1_DIR == _IN_DIR
JMP UNDEFINE_COMMAND
else
MOV A,#EP1CSR
JMP check_fc_end
endif
else
JMP UNDEFINE_COMMAND
endif
check_fc_ep81:
if _USB_EP1 == _ENABLE
if _USB_EP1_DIR == _OUT_DIR
JMP UNDEFINE_COMMAND
else
MOV A,#EP1CSR
JMP check_fc_end
endif
else
JMP UNDEFINE_COMMAND
endif
check_fc_ep02:
if _USB_EP2 == _ENABLE
if _USB_EP2_DIR == _IN_DIR
JMP UNDEFINE_COMMAND
else
MOV A,#EP2CSR
JMP check_fc_end
endif
else
JMP UNDEFINE_COMMAND
endif
check_fc_ep82:
if _USB_EP2 == _ENABLE
if _USB_EP2_DIR == _OUT_DIR
JMP UNDEFINE_COMMAND
else
MOV A,#EP2CSR
JMP check_fc_end
endif
else
JMP UNDEFINE_COMMAND
endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -