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

📄 standard_request.asm

📁 以&#1049307 &#1049319 &#1049287 &#1049289 &#1049317 &#1049301 &#1049288 &#1049283 为核心设计的&#1049320 &#1
💻 ASM
字号:
;;Established date:                  2006/03/01


;;********************************************************************
L_Standardrequest:
	MOV	A,1H
	SZ	F_AddressStatus
	MOV	A,2H
	MOV	M_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 ;wang
	JMP	L_ClearSetFeature		;;1 ;wang 
	JMP	L_StallPipe0			;;2 ;wang 
	JMP	L_ClearSetFeature		;;3 ;wang
	JMP	L_StallPipe0			;;4 ;wang
	JMP	L_SetAddress			                                        ;;5 
	JMP	L_GetDescriptor			                                        ;;6 
	JMP	L_StallPipe0			;;7 ;wang
	JMP	L_GetConfiguration		;;8 ;wang
	JMP	L_SetConfiguration		                                        ;;9
	JMP	L_StallPipe0			;;0AH(GetInterface) ;wang
	JMP	L_StallPipe0			;;0BH(SetInterface) ;wang
	JMP	L_StallPipe0			;;0CH(SynchFrame)   ;wang
;;********************************************************************
L_GetStatus:
	SZ	T_Indexh
	JMP 	L_StallPipe0

	MOV	A,T_Requesttype
	AND	A,1FH                               
	MOV	M_TEMP2,A                                          
	SUB	A,03H
	SZ	C
	JMP	L_StallPipe0
	MOV	A,M_TEMP2
	ADDM	A,PCL
	JMP	L_GetDeviceStatus                    
	JMP	L_GetInterfaceStatus                 
;	JMP 	L_GetEndpointStatus                  
;;-------------------------------------------------------------------- 
L_GetEndpointStatus:
	MOV	A,T_Indexl
	AND	A,7FH                               
	SUB	A,M_EndpointNO
	SZ	C
	JMP	L_StallPipe0
	MOV	A,01H
	SZ	T_Indexl.0
	MOV	A,02H
	AND	A,M_STALL
	SNZ	Z
L_EndpontStall:
	MOV	A,01H
L_SendEndpointStall:
	MOV	M_FIFOBAK0,A                        
	CLR	M_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	M_FIFOBAK0
	CLR	M_FIFOBAK1
	MOV	A,02H
	JMP	L_WriteDataToFIFO_AnyBytes
;;--------------------------------------------------------------------
L_GetDeviceStatus:
	CLR 	ACC
	SZ	F_RemoteWakeup                                   
	SET	ACC.1
	MOV	M_FIFOBAK0,A
	CLR	M_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,M_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,M_STALL                          
	ORM	A,R1
	JMP	L_WriteDataToFIFO_0_Packet
L_ClearStallFeature:
	CPL	ACC
	ANDM	A,M_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	M_DeviceAddress			;;AWR
	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	M_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	M_DeviceAddress
	SZ	F_RemoteWakeup
	SET	ACC.0
	MOV	R1,A
		
	SZ	M_DeviceAddress                     
	SET	F_AddressStatus
	JMP	L_WriteDataToFIFO_0_Packet
;;******************************************************************** 
L_GetDescriptor:
	MOV	A,T_LengthL
	MOV	M_DataLengthL,A
	MOV	A,T_LengthH
	MOV	M_DataLengthH,A
		
	CLR	F_RdHighTable		;FLAG0.6
	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	M_Temp1,A
	SUB	A,04H
	SZ	C
	JMP	L_StallPipe0
	MOV	A,M_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			;T_IndexH=T_IndexL=T_ValueL=0                      
;	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  
	MOV	A,low Table_LanguageID		;00
	SZ	T_ValueL.0
	MOV	A,low ManufactureS		;01
	SZ	T_ValueL.1
	MOV	A,low ProductS
	MOV	A,TBLP
	TABRDL	M_DescriptorLength
	JMP	L_GetSendDataLength
                              
L_Zero_String:
	ADD	A,LOW Table_LanguageID
	SUB	A,2
	MOV 	TBLP,A
	TABRDL	M_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	M_DescriptorLength,A
L_GetSendDataLength:
	CALL	SBR_GetLengthOfSendData              
L_WriteDataToBuffer:
	CALL	SBR_GetDescriptorToBuffer            

	MOV	A,M_DataPacketLength
	XOR	A,C_FIFOSize			;data packet length = 8 byte?
	SZ	Z
	SET	F_BufferFull 			;yes,set the flag of buffer full                        
	CLR	F_SendContinue			;clear the flag of send data continue
	SZ	M_DescriptorLength
	JMP	L_SendContinue			;if Descriptor data not load finally,jmp here
;	JMP	L_SendEnd 			;else,jmp here                           
L_SendEnd:
	SZ	F_BufferFull			;buffer was full?
	SET	F_SendContinue 			;yes,set the flag of send data continue                      
	SZ	F_SendContinue			;need to continue send data?
	JMP	L_WriteDataToFIFO		;yes,write data to FIFO                   

	SZ	M_DataPacketLength 		;load data finally?                  
	JMP	L_WriteDataToFIFO		;no,write data to FIFO
	CLR	F_ControlEvent			;clear the flag of setup finally                       
	JMP	L_WriteDataToFIFO_0_Packet	;return 0 size packet                      
L_SendContinue:
	CLR	F_BufferFull			;clear the flag of buffer full
	SET	F_SendContinue			;set the flag of data not load finally
	MOV	A,TBLP
	MOV	M_TBLPFIFO,A			;save address of table
	JMP	L_WriteDataToFIFO		;write FIFO
;;--------------------------------------------------------------------
L_GetClassDescriptor:
	MOV	A,T_IndexL
	SUB 	A,C_InterfaceNO
	SZ	C
	JMP	L_StallPipe0

	MOV	A,T_ValueH
	AND	A,1FH
	MOV	M_TEMP1,A
	SUB	A,03H
	SZ 	C
	JMP	L_StallPipe0
	MOV	A,M_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	M_DescriptorLength,A
	JMP	L_GetSendDataLength
;;********************************************************************
L_GetConfiguration:
	CLR	M_FIFOBAK0
	SZ 	F_ConfigurationStatus               
	SET	M_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	M_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     PA.0

	SET	F_ConfigurationStatus
;;	SET	TMR1C.4
	JMP	L_WriteDataToFIFO_0_Packet
;;********************************************************************
SBR_GetLengthOfSendData:
	SZ	M_DataLengthH
	RET
	MOV	A,M_DescriptorLength
	SUB	A,M_DataLengthL
	SNZ	C
	RET                                            
L_DesLenBiggerRecLen:
	MOV	A,M_DataLengthL                    
	MOV 	M_DescriptorLength,A
	RET
;;********************************************************************
SBR_GetDescriptorToBuffer:
	MOV	A,OFFSET M_FIFOBAK0		;load FIFO buffer's address
	MOV	MP0,A
	CLR	M_DataPacketLength		;clear packet length
L_GetDescriptorToBufferLoop:                           
	MOV	A,M_DataPacketLength
	XOR	A,C_FIFOSize			;packet size = 8 byte?
	SZ	Z                                  
	RET					;yes,return
	JMP	L_GetDescriptorToBuffer		;no,continue
L_GetDescriptorToBuffer:
	SZ	M_DescriptorLength		;Discriptor data was load finally                 
	JMP	L_Read_Data			;no,read data
	RET					;yes,return
L_Read_Data:
	SNZ	F_RdHighTable			;read table's high 8 bit or low 8 bit
	JMP	L_ReadLowByteOfTable 
;	JMP	L_ReadHighByteOfTable
L_ReadHighByteOfTable:  
	CLR	F_RdHighTable			;14 bit table.if High bit=3fh,then read next 8bit
	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				;next address
	INC	M_DataPacketLength   		;packet length add 1             
	SDZ	M_DescriptorLength		;descriptor length dec 1
	JMP	L_GetDescriptorToBufferLoop
	RET
;;********************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -