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

📄 usb_lib.inc

📁 使用ETOM芯片进行无线收发
💻 INC
📖 第 1 页 / 共 4 页
字号:
//====================================================================================
//	USB LIBRARY v1.7 TABLE LOW BYTE OVERFLOW
//		
//====================================================================================
//USB INTTERRUPT VECTOR
ORG		0x0088
	if _USB_DIS_ANO_INT == _ENABLE
			DISI
	endif	
	if _USB_AUTO_SET_PAGE	==	_ENABLE
			PAGE	0
	endif	
	if _USB_AUTO_SET_BANK == _ENABLE
			BANK	USB_BANK
	endif	
			JBS		EPINTR,0,RX0_ISR
			JBS		EPINTR,2,IN0_ISR
			JMP		TX0_ISR

ORG		0x0090			
;			trap
	if _USB_DIS_ANO_INT == _ENABLE
			DISI
	endif	
	if _USB_AUTO_SET_PAGE	==	_ENABLE
			PAGE	0
	endif	
	if _USB_AUTO_SET_BANK == _ENABLE
			BANK	USB_BANK
	endif	
			JBS		EPINTR,3,EP1_ISR
			JBS		EPINTR,4,EP2_ISR
			JMP		EP3_ISR

ORG		0x0098			
;			trap
	if _USB_DIS_ANO_INT == _ENABLE
			DISI
	endif	
	if _USB_AUTO_SET_PAGE	==	_ENABLE
			PAGE	0
	endif	
	if _USB_AUTO_SET_BANK == _ENABLE
			BANK	USB_BANK
	endif	
			JBS		STAINTR,RSTINT,RST_ISR
			JBS		STAINTR,IDLEINT,IDLE_ISR
			JMP		RESUME_WAKEUP_ISR
		
ORG		0x00A0				
	if _USB_DIS_ANO_INT == _ENABLE
			DISI
	endif	
	if _USB_AUTO_SET_PAGE	==	_ENABLE
			PAGE	0
	endif	
	if _USB_AUTO_SET_BANK == _ENABLE
			BANK	USB_BANK
	endif	
			JBS		HINTR,0,HRX0_ISR
			JBS		HINTR,2,HIN0_ISR
			JMP		HTX0_ISR
		
ORG		0x00A8			
	if _USB_DIS_ANO_INT == _ENABLE
			DISI
	endif	
	if _USB_AUTO_SET_PAGE	==	_ENABLE
			PAGE	0
	endif	
	if _USB_AUTO_SET_BANK == _ENABLE
			BANK	USB_BANK
	endif	
			JBS		HINTR,7,HPSTSC_ISR
			JMP		SOF_ISR
ENDO

RORG	0x00B0

USB_INT_PRE:
	if _USB_AUTO_STORE_IAP0 == _ENABLE
			MOV		A,IAP0
			MOV		STACK_IAP0,A
			NOP
	endif	
			RET

//====================================================================================
//USB INITIAL WORK
USB_INITIAL:
			MOV		A,#0x05
			MOV		IAPADR,A
         	BANK 	0
//Enalbe Peripheral function (USB)		
			BS 		PRIE,USBE	
//Host suspend flag		
//for mouse flag			
			BANK 	USB_BANK
//hub endpoint transmit: 0: not transmit yet  1:transmit ok, 
	  		BC		HUB_STATUS,HTX1_INDEX
	  		CLR		USB_STATUS
	  		CLR 	STATUS_BUF
	  		CLR		A_INTERFACE
//_ENABLE Embeded funtion interrupt 
	  		MOV		A,#0x3F  				
	  		MOV		EPINTE,A
	  			N_NOP
//_ENABLE USB Bus Reset Event 				
	  		MOV		A,#0x01  	 				
	  		MOV		STAINTE,A
	  			N_NOP
//Hub initilize: interrupt _ENABLE
	   		MOV		A,#0xCF
	  		MOV		HINTE,A
	  			N_NOP	
//Address clear   
	  		CLR 	ADDRESS_BUFh
	  		CLR 	ADDRESS_BUFf
	   		MOV		A,#0xFF
	  		MOV		FAR,A
	  			N_NOP
	  		MOV		HAR,A
	  			N_NOP
//USB SPEED
	if _USB_FULL_SPEED	==	_ENABLE	  			
	   		BS		GCNTR,SPD
	else
	   		BC		GCNTR,SPD
	endif
				N_NOP
//Start transmition: plug-in
	   		BS		GCNTR,PLUG
				N_NOP
				_ADD_USB_INITIAL_WORK_SUB
  			RET
  			
//====================================================================================
//Interrupt SUB routines
RX0_ISR:  	
//Which transaction
	if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
	else
			CALL	USB_INT_PRE
	endif	
			JBS		EP0RXTR,OUT,f_out_package
f_setup_package:
//Clear interrupt flag		
			MOV		A,#0b11111101
			JBS		EP0RXTR,SETUP,CLR_SETUP_SETUPOW_F
			MOV		A,#0b11111011
CLR_SETUP_SETUPOW_F:			
			MOV		EP0RXTR,A
  				N_NOP
//Address of ReceiveCommand  
	  		MOV		A,#bmRequestType
	  		MOV		IAP0,A
	  		NOP
ReceiveCommand:
			JBS		IAP0,3,RC_OVER
    		MOV		A,EP0RXDAR
    		MOV		IAC0,A
    		JMP		ReceiveCommand
//Endpoint0 FIFO is 8 	
RC_over:
			ZCHK	wLengthH
  			JBC		STATUS,Z,skip_fc_nodata_set
			ZCHK	wLengthL
    		JBC		STATUS,Z,skip_fc_nodata_set
fc_nodata_set:
//Asking ZeroLength data
  			CLR		EP0TXCTR
    			N_NOP
skip_fc_nodata_set:  	  	
//hub or function? 0:hub,1:function
	  		BS		USB_STATUS,HorF	
	  		BC		USB_STATUS,STALL_INDEX
			BC		FC_STATUS,TBorREG_INDEX     
	  		BC		FC_STATUS,DATA_OUT			
//decode	
	  		MOV		A,#bmRequestType
  			CALL	StageOne
//The  command un-support or it is wrong?
	  		JBS		USB_STATUS,STALL_INDEX,f_stall
//next status   	  	
	  		JMP		next_f_inout	
		
f_out_package:
 //Clear interrupt flag		
			MOV		A,#0b11111110
			MOV		EP0RXTR,A					;OUT
				N_NOP				
 			JBC 	FC_STATUS,DATA_OUT,next_f_inout   							  		
USB_SET_REPORT_SUB: 			
	  		BC		FC_STATUS,DATA_OUT			
	  			_ADD_USB_SET_REPORT_SUB
			CLR		wLengthL
			CLR		wLengthH
    		jmp 	next_f_inout
    		
TX0_ISR:
	if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
	else
			CALL	USB_INT_PRE
	endif	
  //clear interrupt flag				
			MOV		A,#0b11111101
			MOV		EPINTR,A						;INT0TX
  				N_NOP
  //set address or not ?
	  		MOV		A,ADDRESS_BUFf
	  		MOV 	FAR,A
  				N_NOP
/*======  data stage, zero length ?====*/
  //Length of sent data 
			ZCHK	TBLL
	  		JBS		STATUS,Z,exit_tx01
  //Host requests data length 
			ZCHK	wLengthH
  			JBC		STATUS,Z,TX0_ISR1
			ZCHK	wLengthL
	  		JBS		STATUS,Z,exit_tx01	  		
TX0_ISR1:	  		
 		  	JBS 	FC_STATUS,TBorREG_INDEX,USB_GET_REPORT_SUB
    		CALL	fTransmitTable1
 	    	JMP		next_f_inout  
exit_tx01:
	  		CLR		EP0TXCTR
	  			N_NOP
 	    	JMP		next_f_inout  
EXIT_TX1:
BACK_TO_MLOOP:
	if _USB_AUTO_STORE_IAP0 == _ENABLE
			MOV		A,STACK_IAP0
			MOV		IAP0,A
			NOP
			NOP
	endif	
	if _USB_DIS_ANO_INT == _ENABLE
			ENI
	endif	
			RETI

fTransmitTable1:
			MOV		A,ROMADRH
			MOV		TBHPTR,A
			MOV		A,ROMADRL
			MOV		TBLPTR,A
			NOP
fTransmitTable:
  			CLR		CTR_BUF 	
f_not_finish:
  			TBRDP	EP0TXDAR
  			INC		CTR_BUF
  			DJZ		wLengthL,f_finish1
 			JMP		f_finish2
f_finish1:
			ZCHK	wLengthH
			JBS		STTS,Z,f_finish
			DEC		wLengthH
f_finish2:
  			DJZ		TBLL,f_finish
			JBC		CTR_BUF,6,f_not_finish			;=64
f_finish:
  			MOV		A,CTR_BUF
  			MOV		EP0TXCTR,A
  				N_NOP
			MOV		A,TBHPTR
			MOV		ROMADRH,A
			MOV		A,TBLPTR
			MOV		ROMADRL,A
  			RET
  			
USB_GET_REPORT_SUB:
				_ADD_USB_GET_REPORT_EXP_SUB
    		JMP 	next_f_inout
    
IN0_ISR:
	if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
	else
			CALL	USB_INT_PRE
	endif	
			MOV		A,#0b11111011
			MOV		EPINTR,A						;INT0IN
				N_NOP
skip_fc_package_set:
			ZCHK	TBLL
	  		JBS		STATUS,Z,FB_SPACE_TXBUF
check_wlength:
			ZCHK	wLengthH
  			JBC		STATUS,Z,BACK_TO_MLOOP			;not_set
			ZCHK	wLengthL
	  		JBC		STATUS,Z,BACK_TO_MLOOP			;not_set
FB_SPACE_TXBUF:	  		
			JMP		BACK_TO_MLOOP
;	  		CLR		EP0TXCTR
;	  			N_NOP
;	  		JMP		next_f_inout

RST_ISR:
	if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
	else
			CALL	USB_INT_PRE
	endif	
	//NO CONFIGURATION AND LED ON
;			BC 		HINTE,SOFINT
;				N_NOP
			BS		GCNTR,RESET
				N_NOP
//**Remote-wakeup disable,power switch disable	  		
			MOV		A,#0x00							// bus POWER
;KB_HGSR_CONTENT:			
	  		MOV		HGSR,A
	  			N_NOP
	  		CLR		HAR
	  			N_NOP
	  		CLR		FAR
	  			N_NOP
			MOV		A,#0b11111110
			MOV		STAINTR,A							;RSTINT
	  			N_NOP
	  		CLR 	ADDRESS_BUFh
	  		CLR 	ADDRESS_BUFf
	  		CLR		HEP1_CNT
	  		CLR		USB_STATUS
	  		CLR 	STATUS_BUF
;	  		BC		HUB_STATUS,HTX1_INDEX	  					
	if _USB_HUB == _DISABLE
            MOV		A,#127
	  		MOV		HAR,A
				N_NOP
           	BS		HGSR,CONFG	  						
				N_NOP			
			MOV		A,#0b10010001
			MOV		HPCONR,A			
				N_NOP			
			BC		HPSCR1,PCSTSC
				N_NOP
			BS		GCNTR,FUNEN				
				N_NOP			
			MOV		A,#0b10001001
			MOV		HPCONR,A
				N_NOP			
			BC		HPSCR1,PRTSTSC
				N_NOP				
	endif
				_ADD_USB_BUS_RESET_SUB
    	    JMP		BACK_TO_MLOOP
	
IDLE_ISR:		
	if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
	else
			CALL	USB_INT_PRE
	endif	
			MOV		A,#0b11111101
			JBC		USB_STATUS,CONFIG_INDEX,IDLE_ISR_NTRUE
//Host suspend	(normal mode)
			BS		USB_STATUS,GT_SUSPEND
			BS		GCNTR,SUSPEND 
	  			N_NOP
//Set_remote_up	
			MOV		A,#0x0F
			MOV		STAINTE,A
				N_NOP	
				_ADD_USB_IDLE_INT_SUB
			MOV		A,#0b11111001
IDLE_ISR_NTRUE:				
			MOV		STAINTR,A							;IDLEINT
				N_NOP
			JMP		BACK_TO_MLOOP
			
RESUME_WAKEUP_ISR:						
	if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
	else
			CALL	USB_INT_PRE
	endif	
			JBS		STAINTR,RUEINT,RESUME_ISR
//DOWNSTREAM WAKE-UP			
WAKEUP_ISR:
;			MOV		A,#0x07
			MOV		A,#0b11110000						;#0b11110111
			MOV		STAINTR,A
				N_NOP
				_ADD_USB_WAKEUP_INT_SUB
			JMP		BACK_TO_MLOOP

//HOST WAKE-UP			
RESUME_ISR:						
;			JBS		STAINTR,RUEINT,RESUME_ISR
;			MOV		A,#0x0B
			MOV		A,#0b11111011
			MOV		STAINTR,A
				N_NOP
			MOV		A,#0x03
			MOV		STAINTE,A
				N_NOP
			BC		USB_STATUS,GT_SUSPEND
				_ADD_USB_RESUME_INT_SUB
			JMP		BACK_TO_MLOOP

HRX0_ISR:
	if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
	else
			CALL	USB_INT_PRE
	endif	
//for Host suspend 			
//which transaction
			JBS		HEP0RXTR,OUT,h_out_package
h_setup_package:
			MOV		A,#0b11111101
			JBS		HEP0RXTR,SETUP,HCLR_SETUP_SETUPOW_F
			MOV		A,#0b11111011
HCLR_SETUP_SETUPOW_F:			
			MOV		HEP0RXTR,A
	  			N_NOP		
	  		MOV		A,#HbmRequestType
	  		MOV		IAP0,A
	  		NOP
hReceiveCommand:
			JBS		IAP0,3,hRC_over					;=8
    		MOV		A,HEP0RXDAR
    		MOV		IAC0,A
    		JMP		hReceiveCommand
hRC_over:	    
			ZCHK	HwLengthL
    		JBC		STATUS,Z,skip_hub_nodata_set
			ZCHK	HwLengthH
  			JBC		STATUS,Z,skip_hub_nodata_set
hub_nodata_set:
  			CLR		HEP0TXCTR
    			N_NOP
skip_hub_nodata_set:
//hub or function? 0:hub,1:function
  			BC		USB_STATUS,HorF 
	   		BC		USB_STATUS,STALL_INDEX
	  		MOV		A,#HbmRequestType
	  		CALL	StageOne
	  		JBS		USB_STATUS,STALL_INDEX,h_stall
	  		JMP		next_h_inout	
	  			  	
h_out_package:
			MOV		A,#0b11111110
			MOV		HEP0RXTR,A							;OUT
	   			N_NOP
	  		JMP		next_h_inout
	  	
HTX0_ISR:
	if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
	else
			CALL	USB_INT_PRE
	endif	
			JBS		HINTR,1,HTX0_ISR1
			JMP		HTX1_ISR
HTX0_ISR1:
			MOV		A,#0b11111101
			MOV		HINTR,A								;HINT0TX
				N_NOP
	  		MOV		A,ADDRESS_BUFh
	  		MOV 	HAR,A
			  	N_NOP
skip_hub_address_set:
//data stage, zero length ?
			ZCHK	HTBLL
	  		JBS		STATUS,Z,exit_htx0
			ZCHK	HwLengthL
	  		JBC		STATUS,Z,skip_hub_address_set1;exit_htx0
			ZCHK	HwLengthH
	  		JBS		STATUS,Z,exit_htx0
skip_hub_address_set1:	  		
	    	CALL	hTransmitTable1
	    	JMP		next_h_inout

exit_htx0:
	  		CLR		HEP0TXCTR
	  			N_NOP
	    	JMP		next_h_inout
	  	
hTransmitTable1:
			MOV		A,HROMADRH
			MOV		TBHPTR,A
			MOV		A,HROMADRL
			MOV		TBLPTR,A
			NOP
hTransmitTable:
	  		CLR		CTR_BUF	  	
h_not_finish:
	 	 	TBRDP	HEP0TXDAR
	  		INC		CTR_BUF
	  		DJZ		HwLengthL,h_finish1
	  		JMP		h_finish2
h_finish1:
			ZCHK	HwLengthH
			JBS		STTS,Z,h_finish
			DEC		HwLengthH
h_finish2:
	  		DJZ		HTBLL,h_finish
			JBC		CTR_BUF,3,h_not_finish
h_finish:
		  	MOV		A,CTR_BUF
	  		MOV		HEP0TXCTR,A
	  			N_NOP
			MOV		A,TBHPTR
			MOV		HROMADRH,A
			MOV		A,TBLPTR
			MOV		HROMADRL,A
	  		RET

HIN0_ISR:
	if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
	else
			CALL	USB_INT_PRE
	endif	
			MOV		A,#0b11111011
			MOV		HINTR,A								;HINT0IN
				N_NOP
			ZCHK	HTBLL
	  		JBS		STATUS,Z,HIN0_ISR0;next_h_inout
			ZCHK	HwLengthL
	  		JBC		STATUS,Z,HIN0_ISR0
			ZCHK	HwLengthH
	  		JBS		STATUS,Z,HIN0_ISR0;next_h_inout
//else
HIN0_ISR0:
			JMP		BACK_TO_MLOOP			

HTX1_ISR:
			BC		HEP1TXCSR,SESTALL
				N_NOP
			JBC		HUB_STATUS,HTX1_INDEX,not_cleared_yet
HUB_EP1_CLEAR:
			BC		HEP1TXCSR,RXTXEN
			JMP		CLR_HINTR_HINT1
		
not_cleared_yet:		
			BS		HEP1TXCSR,RXTXEN
CLR_HINTR_HINT1:
				N_NOP
			MOV		A,#0b11110111
			MOV		HINTR,A								;HINT1
				N_NOP
			JMP		BACK_TO_MLOOP			

HPSTSC_ISR:	
	if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
	else
			CALL	USB_INT_PRE
	endif	
			BC		HUB_STATUS,HTX1_INDEX
			MOV		A,#0b01111111
			MOV		HINTR,A								;HPSTSCINT
				N_NOP
//hub status change?
		  	MOV		A,#0b00001100
	  		AND		A,HSR
	  		JBS		STATUS,Z,skip_hub 
	  		BS		STATUS_BUF,HSTSC
skip_hub:
//port1 status change?
		  	MOV		A,#0b00011111
	  		AND		A,HPSCR1
	  		JBS		STATUS,Z,skip_port1
	  		BS		STATUS_BUF,HSTSCP1
skip_port1:
//port2 status change?
	 	 	MOV		A,#0b00011111
	  		AND		A,HPSCR2
	  		JBS		STATUS,Z,skip_port2
	   		BS		STATUS_BUF,HSTSCP2 
skip_port2:
//port3 status change?
		  	MOV		A,#0b00011111
	  		AND		A,HPSCR3
	  		JBS		STATUS,Z,skip_port3
	   		BS		STATUS_BUF,HSTSCP3
skip_port3:
//port4 status change?
		  	MOV		A,#0b00011111
	  		AND		A,HPSCR4
	  		JBS		STATUS,Z,skip_port4
	   		BS		STATUS_BUF,HSTSCP4  
skip_port4:
//NAK or not ?
			MOV		A,STATUS_BUF
			AND		A,#0b00011110
	  		JBS		STATUS,Z,response_nak
response_ack:
	 	 	MOV		HEP1TXDAR,A	  			
				N_NOP
CHECK_PORT1_STATUS:			
			JBC		STATUS_BUF,1,CHECK_PORT2_STATUS
			MOV		A,#HSR+1
			MOV		IAP0,A
			NOP
			JBS		IAC0,4,NOT_ENABLE_HEP1
CHECK_PORT2_STATUS:			
			JBC		STATUS_BUF,2,CHECK_PORT3_STATUS
			MOV		A,#HSR+2
			MOV		IAP0,A
			NOP
			JBS		IAC0,4,NOT_ENABLE_HEP1
CHECK_PORT3_STATUS:			
			JBC		STATUS_BUF,3,CHECK_PORT4_STATUS
			MOV		A,#HSR+3
			MOV		IAP0,A
			NOP
			JBS		IAC0,4,NOT_ENABLE_HEP1
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

⌨️ 快捷键说明

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