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

📄 et44_usb_lib.inc

📁 在台湾义统公司ET44M210开发实验板环境下
💻 INC
📖 第 1 页 / 共 4 页
字号:

ClearFEndpointStall03:
		if _USB_EP3	==	_ENABLE
			if _USB_EP3_DIR	==	_IN_DIR
			JMP		UNDEFINE_COMMAND
			else
			BC		EP3CSR,SESTALL
			JMP		ClearFEndpointStall_END		
			endif
		else
			JMP		UNDEFINE_COMMAND
		endif

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

⌨️ 快捷键说明

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