⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 standard_request.asm

📁 本次设计的RS232 to USB转换器
💻 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 + -