?? standard_request.asm
字號:
;;Established date: 2005/09/01
;;********************************************************************
L_Standardrequest:
MOV A,1H
SZ F_AddressStatus
MOV A,2H
MOV R_EndpointNO,A
MOV A,T_RequestNUM
SUB A,0DH
SZ C
JMP L_Stallpipe0
MOV A,T_RequestNUM
ADDM A,PCL
JMP L_GetStatus ;;0
JMP L_ClearSetFeature ;;1
JMP L_StallPipe0 ;;2
JMP L_ClearSetFeature ;;3
JMP L_StallPipe0 ;;4
JMP L_SetAddress ;;5
JMP L_GetDescriptor ;;6
JMP L_StallPipe0 ;;7
JMP L_GetConfiguration ;;8
JMP L_SetConfiguration ;;9
JMP L_StallPipe0 ;;0AH(GetInterface)
JMP L_StallPipe0 ;;0BH(SetInterface)
JMP L_StallPipe0 ;;0CH(SynchFrame)
;;********************************************************************
L_GetStatus:
SZ T_Indexh
JMP L_StallPipe0
MOV A,T_Requesttype
AND A,1FH
MOV R_Receiver,A
SUB A,03H
SZ C
JMP L_StallPipe0
MOV A,R_TEMP2
ADDM A,PCL
JMP L_GetDeviceStatus
JMP L_GetInterfaceStatus
; JMP L_GetEndpointStatus
;;--------------------------------------------------------------------
L_GetEndpointStatus:
MOV A,T_Indexl
AND A,7FH
SUB A,R_EndpointNO
SZ C
JMP L_StallPipe0
MOV A,01H
SZ T_Indexl.0
MOV A,02H
AND A,R_STALL
SNZ Z
L_EndpontStall:
MOV A,01H
L_SendEndpointStall:
MOV R_FIFOBAK0,A
CLR R_FIFOBAK1
MOV A,02H
JMP L_WriteDataToFIFO_AnyBytes
;;--------------------------------------------------------------------
L_GetInterfaceStatus:
SNZ F_AddressStatus
JMP L_StallPipe0
MOV A,T_Indexl
SUB A,C_InterfaceNO
SZ C
JMP L_StallPipe0
L_SendInterfaceStatus:
CLR R_FIFOBAK0
CLR R_FIFOBAK1
MOV A,02H
JMP L_WriteDataToFIFO_AnyBytes
;;--------------------------------------------------------------------
L_GetDeviceStatus:
CLR ACC
SZ F_RemoteWakeup
SET ACC.1
MOV R_FIFOBAK0,A
CLR R_FIFOBAK1
MOV A,02H
JMP L_WriteDataToFIFO_AnyBytes
;;********************************************************************
L_ClearSetFeature:
SZ T_Valueh
JMP L_StallPipe0
SZ T_Indexh
JMP L_StallPipe0
MOV A,T_RequestType
AND A,1FH
SZ Z
JMP L_Clear_SetDeviceFeature
XOR A,02H
SNZ Z
JMP L_StallPipe0
; JMP L_Clear_SetEndpointFeature
;;--------------------------------------------------------------------
L_Clear_SetEndpointFeature:
SZ T_Valuel
JMP L_StallPipe0
MOV A,T_Indexl
AND A,7FH
SUB A,R_EndpointNO
SZ C
JMP L_StallPipe0
MOV A,C_STALL
MOV MP1,A
MOV A,1H
SZ T_Indexl.0
MOV A,2H
SNZ T_RequestNUM.1
JMP L_ClearStallFeature
L_SetStallFeature:
ORM A,R_STALL
ORM A,R1
JMP L_WriteDataToFIFO_0_Packet
L_ClearStallFeature:
CPL ACC
ANDM A,R_STALL
ANDM A,R1
JMP L_WriteDataToFIFO_0_Packet
;;--------------------------------------------------------------------
L_Clear_SetDeviceFeature:
SDZA T_Valuel
JMP L_StallPipe0
SZ T_Indexl
JMP L_StallPipe0
MOV A,C_Addr_Wakeup
MOV MP1,A
SET F_RemoteWakeup
SNZ T_RequestNUM.1
CLR F_RemoteWakeup
CLR C
RLCA R_DeviceAddress
SZ T_RequestNUM.1
SET ACC.0
MOV R1,A
JMP L_WriteDataToFIFO_0_Packet
;;********************************************************************
L_SetAddress:
SZ T_ValueH
JMP L_StallPipe0
MOV A,T_ValueL
MOV R_DeviceAddress,A
MOV A,C_SIES
MOV MP1,A
MOV A,01H
ORM A,R1
MOV A,C_Addr_Wakeup
MOV MP1,A
CLR C
RLCA R_DeviceAddress
SZ F_RemoteWakeup
SET ACC.0
MOV R1,A
SZ R_DeviceAddress
SET F_AddressStatus
JMP L_WriteDataToFIFO_0_Packet
;;********************************************************************
L_GetDescriptor:
MOV A,T_LengthL
MOV R_DataLengthL,A
MOV A,T_LengthH
MOV R_DataLengthH,A
CLR F_RdHighTable
MOV A,T_RequestType
AND A,1FH
SZ Z
JMP L_GetStandardDescriptor
XOR A,1H
SZ Z
JMP L_GetClassDescriptor
JMP L_StallPipe0
;;--------------------------------------------------------------------
;;the high byte of wValue is descriptor type value.
L_GetStandardDescriptor:
MOV A,T_ValueH
AND A,1FH
MOV R_Temp1,A
SUB A,04H
SZ C
JMP L_StallPipe0
MOV A,R_Temp1
ADDM A,PCL
JMP L_StallPipe0
JMP L_GetDeviceDescriptor
JMP L_GetConfigurationDescriptor
; JMP L_GetStringDescriptor
;;--------------------------------------------------------------------
L_GetStringDescriptor:
MOV A,T_IndexH
OR A,T_IndexL
OR A,T_ValueL
MOV A,2
SZ Z
JMP L_Zero_String
; JMP L_Get_String
L_Get_String:
MOV A,T_IndexH
XOR A,C_LanguageIDH
SNZ Z
JMP L_StallPipe0
MOV A,T_IndexL
XOR A,C_LanguageIDL
SNZ Z
JMP L_StallPipe0
MOV A,2H
SUB A,T_ValueL
SNZ C
JMP L_StallPipe0
ADDM A,PCL
ADD A,1+4
ADD A,2+1
L_Zero_String:
ADD A,LOW Table_LanguageID
SUB A,2
MOV TBLP,A
TABRDL R_DescriptorLength
JMP L_GetSendDataLength
;;--------------------------------------------------------------------
L_GetConfigurationDescriptor:
MOV A,LOW Table_ConfigurationDescriptor
MOV TBLP,A
MOV A,C_ConfigurationDesLength
JMP L_CheckIndex
;;--------------------------------------------------------------------
L_GetDeviceDescriptor:
MOV A,LOW Table_DeviceDescriptor
MOV TBLP,A
MOV A,C_DeviceDescriptorLength
JMP L_CheckIndex
;;--------------------------------------------------------------------
L_CheckIndex:
SZ T_IndexL
JMP L_StallPipe0
SZ T_IndexH
JMP L_StallPipe0
MOV R_DescriptorLength,A
L_GetSendDataLength:
CALL SBR_GetLengthOfSendData
L_WriteDataToBuffer:
CALL SBR_GetDescriptorToBuffer
MOV A,R_DataPacketLength
XOR A,C_FIFOSize
SZ Z
SET F_BufferFull
CLR F_SendContinue
SZ R_DescriptorLength
JMP L_SendContinue
; JMP L_SendEnd
L_SendEnd:
SZ F_BufferFull
SET F_SendContinue
SZ F_SendContinue
JMP L_WriteDataToFIFO
SZ R_DataPacketLength
JMP L_WriteDataToFIFO
CLR F_ControlEvent
JMP L_WriteDataToFIFO_0_Packet
L_SendContinue:
CLR F_BufferFull
SET F_SendContinue
MOV A,TBLP
MOV R_TBLPFIFO,A
JMP L_WriteDataToFIFO
;;--------------------------------------------------------------------
L_GetClassDescriptor:
MOV A,T_IndexL
SUB A,C_InterfaceNO
SZ C
JMP L_StallPipe0
MOV A,T_ValueH
AND A,1FH
MOV R_TEMP1,A
SUB A,03H
SZ C
JMP L_StallPipe0
MOV A,R_TEMP1
ADDM A,PCL
JMP L_StallPipe0
JMP L_GetOptionalHIDDescriptor
JMP L_GetReportDescriptor
;;--------------------------------------------------------------------
L_GetReportDescriptor:
MOV A,LOW Table_ReportDescriptor
MOV TBLP,A
MOV A,C_ReportDescriptorLength
JMP L_CheckIndex
;;--------------------------------------------------------------------
L_GetOptionalHIDDescriptor:
MOV A,LOW Table_HIDDescriptor
MOV TBLP,A
MOV A,C_HIDDescriptorLength
MOV R_DescriptorLength,A
JMP L_GetSendDataLength
;;********************************************************************
L_GetConfiguration:
CLR R_FIFOBAK0
SZ F_ConfigurationStatus
SET R_FIFOBAK0.0
MOV A,01H
JMP L_WriteDataToFIFO_AnyBytes
;;********************************************************************
L_SetConfiguration:
MOV A,1H
SUB A,T_ValueL
SNZ C
JMP L_StallPipe0
CLR F_AddressStatus
SNZ Z
SET F_AddressStatus
CLR R_STALL
MOV A,C_STALL
MOV MP1,A
CLR R1
SZ T_ValueL
JMP L_ToConfigurationStatus
CLR F_ConfigurationStatus
JMP L_WriteDataToFIFO_0_Packet
L_ToConfigurationStatus:
SET F_ConfigurationStatus
SET TMR1C.4
JMP L_WriteDataToFIFO_0_Packet
;;********************************************************************
SBR_GetLengthOfSendData:
SZ R_DataLengthH
RET
MOV A,R_DescriptorLength
SUB A,R_DataLengthL
SNZ C
RET
L_DesLenBiggerRecLen:
MOV A,R_DataLengthL
MOV R_DescriptorLength,A
RET
;;********************************************************************
SBR_GetDescriptorToBuffer:
MOV A,OFFSET R_FIFOBAK0
MOV MP0,A
CLR R_DataPacketLength
L_GetDescriptorToBufferLoop:
MOV A,R_DataPacketLength
XOR A,C_FIFOSize
SZ Z
RET
JMP L_GetDescriptorToBuffer
L_GetDescriptorToBuffer:
SZ R_DescriptorLength
JMP L_Read_Data
RET
L_Read_Data:
SNZ F_RdHighTable
JMP L_ReadLowByteOfTable
; JMP L_ReadHighByteOfTable
L_ReadHighByteOfTable:
CLR F_RdHighTable
TABRDL R0
INC TBLP
MOV A,TBLH
AND A,00111111B
XOR A,3FH
SZ Z
JMP L_Read_Data
MOV A,TBLH
AND A,3FH
MOV R0,A
JMP L_ReadNextByte
L_ReadLowByteOfTable:
SET F_RdHighTable
TABRDL R0
JMP L_ReadNextByte
;;--------------------------------------------------------------------
L_ReadNextByte:
INC MP0
INC R_DataPacketLength
SDZ R_DescriptorLength
JMP L_GetDescriptorToBufferLoop
RET
;;********************************************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -