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

📄 et44_usb_lib.inc

📁 8*18標準鍵盤應用程式, 其中包含: 按鍵輸入 &#1048715 固定時間輸出按鍵值給主機. 燈號輸出 &#1048715 主機會送出燈號資&#63934 給裝置, 有變化才有輸出.
💻 INC
📖 第 1 页 / 共 4 页
字号:
CHECK_PORT4_STATUS:			
			JBC		STATUS_BUF,4,ENABLE_HEP1
			MOV		A,#HSR+4
			MOV		IAP0,A
			NOP
			JBS		IAC0,4,NOT_ENABLE_HEP1
ENABLE_HEP1:									
			BC		HEP1TXCSR,SESTALL
				N_NOP
			BS		HEP1TXCSR,RXTXEN
				N_NOP
			JMP		BACK_TO_MLOOP			
			
NOT_ENABLE_HEP1:
			MOV		A,#16
		   	MOV		HEP1_CNT,A	
			JMP		BACK_TO_MLOOP			

response_nak:
			JBS		STATUS_BUF,HSTSC,response_ack
			BC		HEP1TXCSR,SESTALL
				N_NOP
	  		BC		HEP1TXCSR,RXTXEN
				N_NOP		
			JMP		BACK_TO_MLOOP			
	  	
//Re-_ENABLE hub EP0 interrupt
next_h_inout:
  			BC		HEP0RXCSR,SESTALL
  				N_NOP
  			BC		HEP0TXCSR,SESTALL
  				N_NOP
  			BS		HEP0RXCSR,RXTXEN
				N_NOP
  			BS		HEP0TXCSR,RXTXEN
  				N_NOP
			JMP		BACK_TO_MLOOP			

//***Stall unsupported requests for hub
h_stall:
			BS		HEP0RXCSR,SESTALL
				N_NOP
h_tx_stall:													;V1.8
			BS		HEP0TXCSR,SESTALL
				N_NOP	
			JMP		BACK_TO_MLOOP			
	
//Re-_ENABLE function EP0 interrupt
next_f_inout:
  			BC		EP0RXCSR,SESTALL
  				N_NOP
  			BC		EP0TXCSR,SESTALL
  				N_NOP
  			BS		EP0RXCSR,RXTXEN
  				N_NOP
  			BS		EP0TXCSR,RXTXEN
  				N_NOP  	
			JMP		BACK_TO_MLOOP			

//***Stall unsupported requests for function
f_stall:
			BS		EP0RXCSR,SESTALL
				N_NOP
f_tx_stall:													;V1.8
			BS		EP0TXCSR,SESTALL
				N_NOP
			JMP		BACK_TO_MLOOP			

SOF_ISR:
	if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
	else
			CALL	USB_INT_PRE
	endif	
			MOV		A,#0b10111111
			MOV		HINTR,A								;SOFINT
				N_NOP
				_ADD_USB_SOF_INT_SUB
			ZCHK	HEP1_CNT
			JBC		STTS,Z,SOF_ISR_1
			JMP		BACK_TO_MLOOP			
SOF_ISR_1:
			DJZ		HEP1_CNT,ENABLE_HEP1
			JMP		BACK_TO_MLOOP			

//====================================================================================
// Endpoint subroutine
EP1_ISR:
			CALL	USB_INT_PRE
			MOV		A,#0b11110111					
			MOV		EPINTR,A						
				N_NOP										
				_ADD_USB_EP1_SUB
			JMP		BACK_TO_MLOOP			

			
EP2_ISR:
			CALL	USB_INT_PRE
			MOV		A,#0b11101111
			MOV		EPINTR,A						;INT2
				N_NOP				
				_ADD_USB_EP2_SUB
			JMP		BACK_TO_MLOOP			
			
EP3_ISR:
			CALL	USB_INT_PRE
			MOV		A,#0b11011111
			MOV		EPINTR,A						;INT3
				N_NOP
				_ADD_USB_EP3_SUB
			JMP		BACK_TO_MLOOP			

//====================================================================================
//Control transfer, stage one.
StageOne:
			MOV		IAP0,A					// bmRequestType (HUB & DEVICE)
			NOP
			MOV		A,IAC0
			MOV		TEMP_UREG,A
//Standard requests
  //host to device requests
	if _RequestType_0X00	==	_ENABLE
			XOR		A,#0x00
			JBS		STATUS,Z,RequestType00	//device
	endif
	if _RequestType_0X01	==	_ENABLE
			MOV		A,#0x01
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,RequestType01	//interface
	endif
	if _RequestType_0X02	==	_ENABLE
			MOV		A,#0x02
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,RequestType02	//endpoint
	endif
  //device to host requests	
	if _RequestType_0X80	==	_ENABLE
			MOV		A,#0x80
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,RequestType80	//device
	endif
	if _RequestType_0X81	==	_ENABLE
			MOV		A,#0x81
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,RequestType81	//interface
	endif
	if _RequestType_0X82	==	_ENABLE
			MOV		A,#0x82
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,RequestType82	//endpoint
	endif
//Hub-class requests
  //host to device requests
	if _RequestType_0X20	==	_ENABLE
			MOV		A,#0x20
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,RequestType20	//device		
	endif
	if _RequestType_0X21	==	_ENABLE
			MOV		A,#0x21
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,RequestType21	//other
	endif
	if _RequestType_0X23	==	_ENABLE
			MOV		A,#0x23
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,RequestType23	//other
	endif
  //device to host requests
	if _RequestType_0XA0	==	_ENABLE
			MOV		A,#0xA0
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,RequestTypeA0	//device
	endif
	if _RequestType_0XA1	==	_ENABLE
			MOV		A,#0xA1
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,RequestTypeA1	//interface
	endif
	if _RequestType_0XA3	==	_ENABLE
			MOV		A,#0xA3
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,RequestTypeA3	//other			
	endif
Vendorstageone:
				_ADD_USB_bmRequestType
			JMP		UNKNOWN_bRequest		

/*==================
Controltransfer, stage two
Decoding
================== */
	if _RequestType_0X00	==	_ENABLE
RequestType00:
  //Clear Feature
			MOV		A,IAC0					// bRequest
			MOV		TEMP_UREG,A
		if _RT0X00_Request_0X01	==	_ENABLE
			MOV		A,#clear_feature
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,ClearRemoteWakeup
		endif
  //Set Feature
		if _RT0X00_Request_0X03	==	_ENABLE
			MOV		A,#set_feature
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,SetRemoteWakeup
		endif
  //Set Address
		if _RT0X00_Request_0X05	==	_ENABLE
			MOV		A,#set_address
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,SetAddress
		endif
  //Set Descriptor
		if _RT0X00_Request_0X07	==	_ENABLE
			MOV		A,#set_descriptor
			XOR		A,TEMP_UREG
			JBS		STTS,Z,SetDescriptor
		endif
  //Set Configuration
		if _RT0X00_Request_0X09	==	_ENABLE
			MOV		A,#set_configuration
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,SetConfiguration
		endif
	endif
				_ADD_USB_RT0X00_Request
  //else
UNKNOWN_bRequest:  
UNKNOWN_wValueL:
UNKNOWN_wIndex:
UNKNOWN_wLength:
UNDEFINE_COMMAND:
  			BS		USB_STATUS,STALL_INDEX
NO_NEED_ANSWER:  			
  			RET
	
	if _RequestType_0X01	==	_ENABLE
RequestType01:
  //Set Interface
		if _RT0X01_Request_0X0B	==	_ENABLE
			MOV		A,#set_interface			// bRequest
			XOR		A,IAC0
			JBS		STATUS,Z,SetInterface 
		endif 
				_ADD_USB_RT0X01_Request
  //else
			JMP		UNKNOWN_bRequest
	endif

	if _RequestType_0X02	==	_ENABLE
RequestType02:
  //Clear Feature
		if _RT0X02_Request_0X01	==	_ENABLE
			MOV		A,IAC0						// bRequest
			MOV		TEMP_UREG,A
			MOV		A,#clear_feature
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,ClearEndpointStall
		endif
  //Set Feature
		if _RT0X02_Request_0X03	==	_ENABLE
			MOV		A,#set_feature
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,SetEndpointStall
		endif
				_ADD_USB_RT0X02_Request
  //else
			JMP		UNKNOWN_bRequest
	endif

	if _RequestType_0X80	==	_ENABLE
RequestType80:
  //Get Status
			MOV		A,IAC0						// bRequest
			MOV		TEMP_UREG,A
		if _RT0X80_Request_0X00	==	_ENABLE
			MOV		A,#get_status
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,GetDeviceStatus
		endif
   //Get Descriptor
		if _RT0X80_Request_0X06	==	_ENABLE
			MOV		A,#get_descriptor
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,GetDescriptor	
		endif
  //Configuration
		if _RT0X80_Request_0X08	==	_ENABLE
			MOV		A,#get_configuration
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,GetConfiguration
		endif
				_ADD_USB_RT0X80_Request
  //else
			JMP		UNKNOWN_bRequest
	endif

	if _RequestType_0X81	==	_ENABLE
RequestType81:
  //Get Status
			MOV		A,IAC0						// bRequest
			MOV		TEMP_UREG,A
		if _RT0X81_Request_0X00	==	_ENABLE
			MOV		A,#get_status
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,GetInterfaceStatus
		endif
  //Get Descriptor
		if _RT0X81_Request_0X06	==	_ENABLE
  			MOV		A,#get_descriptor
  			XOR		A,TEMP_UREG
  			JBS		STTS,Z,HID_report_descriptor
		endif
  //Get Interface
		if _RT0X81_Request_0X0A	==	_ENABLE
			MOV		A,#get_interface
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,GetInterface
		endif
				_ADD_USB_RT0X81_Request
  //else
			JMP		UNKNOWN_bRequest
	endif
	
	if _RequestType_0X82	==	_ENABLE
RequestType82:
  //Get Status
		if _RT0X82_Request_0X00	==	_ENABLE
			MOV		A,#get_status					// bRequest
			XOR		A,IAC0
			JBS		STATUS,Z,GetEndpointStatus
		endif
				_ADD_USB_RT0X82_Request
  //else
			JMP		UNKNOWN_bRequest
	endif
	
	if _RequestType_0X20	==	_ENABLE
RequestType20:
  //Clear Feature
			MOV		A,IAC0						// bRequest
			MOV		TEMP_UREG,A
		if _RT0X20_Request_0X01	==	_ENABLE
			MOV		A,#clear_feature
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,ClearHubFeature
		endif
  //Set Feature
		if _RT0X20_Request_0X03	==	_ENABLE
			MOV		A,#set_feature
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,SetHubFeature
		endif
  //Set Descriptor
		if _RT0X20_Request_0X06	==	_ENABLE
			MOV		A,#set_descriptor
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,SetHubDescriptor
		endif
				_ADD_USB_RT0X20_Request
  //else
 			JMP		UNKNOWN_bRequest
	endif
	
	if _RequestType_0X21	==	_ENABLE
RequestType21:
  //Set Report
			MOV		A,IAC0						// bRequest
			MOV		TEMP_UREG,A
		if _RT0X21_Request_0X09	==	_ENABLE
  			MOV		A,#set_report
			XOR		A,TEMP_UREG
  			JBS		STATUS,Z,SetReport
		endif
  //Set Idle
		if _RT0X21_Request_0X0A	==	_ENABLE
  			MOV		A,#set_idle
			XOR		A,TEMP_UREG
  			JBS		STATUS,Z,SetIdleReport
		endif
  //Set Protocol
		if _RT0X21_Request_0X0B	==	_ENABLE
  			MOV		A,#set_protocol;
			XOR		A,TEMP_UREG
  			JBS		STATUS,Z,SetProtocolReport
		endif
				_ADD_USB_RT0X21_Request
  //else
			JMP		UNKNOWN_bRequest
	endif

	if _RequestType_0X23	==	_ENABLE
RequestType23:
  //Clear Feature
			MOV		A,IAC0						// bRequest
			MOV		TEMP_UREG,A
		if _RT0X23_Request_0X01	==	_ENABLE
			MOV		A,#clear_feature
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,ClearPortFeature
		endif
  //Set Feature
		if _RT0X23_Request_0X03	==	_ENABLE
			MOV		A,#set_feature
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,SetPortFeature
		endif
				_ADD_USB_RT0X23_Request
  //else
			JMP		UNKNOWN_bRequest
	endif
	
	if _RequestType_0XA0	==	_ENABLE
RequestTypeA0:
  //Get Status
			MOV		A,IAC0						// bRequest
			MOV		TEMP_UREG,A
		if _RT0XA0_Request_0X00	==	_ENABLE
			MOV		A,#get_status
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,GetHubStatus
		endif
  //Get Descriptor
		if _RT0XA0_Request_0X06	==	_ENABLE
			MOV		A,#get_descriptor
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,GetHubDescriptor
		endif
				_ADD_USB_RT0XA0_Request
  //else
			JMP		UNKNOWN_bRequest
	endif
	
	if _RequestType_0XA1	==	_ENABLE
RequestTypeA1:
  //Get Report
			MOV		A,IAC0						// bRequest
			MOV		TEMP_UREG,A
		if _RT0XA1_Request_0X01	==	_ENABLE
  			MOV 	A,#get_report
			XOR		A,TEMP_UREG
  			JBS		STATUS,Z,GetReport			
		endif
  //Get Idle
		if _RT0XA1_Request_0X02	==	_ENABLE
  			MOV 	A,#get_idle
			XOR		A,TEMP_UREG
  			JBS		STATUS,Z,GetIdleReport
		endif
  //Get Protocol
		if _RT0XA1_Request_0X03	==	_ENABLE
  			MOV 	A,#get_protocol
			XOR		A,TEMP_UREG
  			JBS		STATUS,Z,GetProtocolReport
		endif
				_ADD_USB_RT0XA1_Request
  //else
			JMP		UNKNOWN_bRequest
	endif

	if _RequestType_0XA3	==	_ENABLE
RequestTypeA3:
  //Get Status
			MOV		A,IAC0						// bRequest
			MOV		TEMP_UREG,A
		if _RT0XA3_Request_0X00	==	_ENABLE
			MOV		A,#get_status
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,GetPortStatus
		endif
  //Get State
		if _RT0XA3_Request_0X02	==	_ENABLE
			MOV		A,#get_state
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,GetBusState
		endif
				_ADD_USB_RT0XA3_Request
  //else
			JMP		UNKNOWN_bRequest
	endif

/*===================
Control transfer, stage three
Process the request
=================== */
//Standard
	if _RT0X00_Request_0X01	==	_ENABLE
ClearRemoteWakeup:
			JBS		USB_STATUS,HorF,F_CRWup
		if _RT0X00_R0X01_Value0001*_USB_HUB	==	_ENABLE
			MOV		A,#device_remote_wakeup
			XOR		A,IAC0						;wValueL
			JBC		STATUS,Z,UNKNOWN_wValueL
CRWup_SAME:	
			BC		HGSR,suspend
				N_NOP
			BC		HGSR,RMWUPEN
				N_NOP
			BC		STAINTE,FRWPINT
				N_NOP
			RET
		endif
			
F_CRWup:
			MOV		A,#device_remote_wakeup
			XOR		A,IAC0						;wValueL
			JBC		STATUS,Z,UNKNOWN_wValueL
FCRWup_SAME:	
			BC		GCNTR,SUSPEND 
				N_NOP
			BC		STAINTE,IDLEINTE
				N_NOP
;			BC		STAINTE,FRWPINT
;				N_NOP
		if _USB_HUB	==	_ENABLE
			BC		HGSR,RMWUPEN
				N_NOP
		else
			BC	USB_STATUS,REWUP_FLAG
		endif
			RET
	endif
			
	
	if _RT0X00_Request_0X03	==	_ENABLE
SetRemoteWakeup:
			JBS		USB_STATUS,HorF,F_SRWup
		if _RT0X00_R0X03_Value0001*_USB_HUB	==	_ENABLE
			MOV		A,#device_remote_wakeup
			XOR		A,IAC0 						;wValueL;NOT IAP0 020924 I.6
			JBC		STATUS,Z,UNKNOWN_wValueL
SRWup_SAME:			
			BS		HGSR,RMWUPEN
				N_NOP
			BS		STAINTE,FRWPINT
				N_NOP
NOT_DEVICE:				
			RET 
		endif
			
F_SRWup:
			MOV		A,#device_remote_wakeup
			XOR		A,IAC0 						;wValueL;NOT IAP0 020924 I.6
			JBC		STATUS,Z,UNKNOWN_wValueL
FSRWup_SAME:			
			mov		a,#0b11110000
			mov		STAINTr,a
				N_NOP
;			BS		HGSR,RMWUPEN
			BS		STAINTE,IDLEINTE
				N_NOP
;			BS		STAINTE,FRWPINT
;				N_NOP
		if _USB_HUB	==	_ENABLE
			BS		HGSR,RMWUPEN
				N_NOP
		else
			BS	USB_STATUS,REWUP_FLAG
		endif
			RET 
	endif
			
	
	if _RT0X02_R0X01_Value0000	==	_ENABLE
ClearEndpointStall:
			MOV		A,#endpoint_stalled
			XOR		A,IAC0						;wValueL
			JBC		STATUS,Z,UNKNOWN_wValueL
			INC		IAP0 						;wIndexL
  			JBS		USB_STATUS,HorF,ClearFunctionStall
		if _USB_HUB	==	_ENABLE
  //Clear any stall condition
			MOV		A,IAC0
			JBS		STTS,Z,ClearHEndpointStall00
			XOR		A,#hub_endpoint80
			JBS		STTS,Z,ClearHEndpointStall80
			XOR		A,#hub_endpoint81-hub_endpoint80
			JBC		STTS,Z,UNDEFINE_COMMAND
ClearHEndpointStall81:
			BC		HEP1TXCSR,SESTALL
ClearHEndpointStall_END:
				N_NOP
		endif
			RET
			
		if _USB_HUB	==	_ENABLE
ClearHEndpointStall00:
			BC		HEP0RXCSR,SESTALL
			JMP		ClearHEndpointStall_END
	
ClearHEndpointStall80:
			BC		HEP0TXCSR,SESTALL
			JMP		ClearHEndpointStall_END
		endif
	
ClearFunctionStall:
			MOV		A,IAC0
			DEC		IAP0
			AND		A,#0b00000011
			ADD		A,#0x01
ClearFEndpointStall_R:
			JBC		IAC0,7,$+3
ClearFEndpointStall_T:
			ADD		A,#0x04			
			TBL
			JMP		ClearFEndpointStall00
			JMP		ClearFEndpointStall01
			JMP		ClearFEndpointStall02
			JMP		ClearFEndpointStall03
			JMP		ClearFEndpointStall80
			JMP		ClearFEndpointStall81
			JMP		ClearFEndpointStall82
ClearFEndpointStall83:
		if _USB_EP3	==	_ENABLE
			if _USB_EP3_DIR	==	_OUT_DIR
			JMP		UNDEFINE_COMMAND
			else
			BC		EP3CSR,SESTALL
			JMP		ClearFEndpointStall_END		
			endif
		else
			JMP		UNDEFINE_COMMAND
		endif			

ClearFEndpointStall03:
		if _USB_EP3	==	_ENABLE

⌨️ 快捷键说明

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