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

📄 u_u_usb_macro.inc

📁 U盘原代码,包括FAT16和USB的所有东东都是开放的,请认真看呀.
💻 INC
字号:
// ====================================================================================
// Macro program (USB Library v1.2)
//
// ====================================================================================

;1 USB REGISTER ACCESS DELAY TIMEING
N_NOP					 		MACRO
									CALL	N_NOP_DELAY
								ENDM

;2 USB INITIAL SUB (USB ENABLE/BANK 1/IAP0 AUTO+1/FLAG SETTING/USB INT ENABLE/SPPED SELECT/PLUG IN)
_ADD_USB_INITIAL_SUB			MACRO
									CALL	USB_INITIAL
								ENDM

_ADD_USB_INITIAL_WORK_SUB		MACRO
								ENDM

;3 USB BUS RESET INT SUB (DEFAULT THE DEVICE WORK)
_ADD_USB_BUS_RESET_SUB			MACRO
									BC		BULK_STATE,CONFIG
									
									MOV		A,#0X01
									MOV		RAMBS1,A
									MOV		A,#ep1csr
									MOV		IAP1,A				
									NOP
								;	BC		IAC1,1
									n_nop
								;	BC		IAC1,0
									n_nop	
									call	busresetsub							
							;	bs		count3,7   
								ENDM

;4 USB IDLE INT SUB	(PREPARE GO TO USB SUSPEND)
_ADD_USB_IDLE_INT_SUB			MACRO
								ENDM

;5 USB HUB DOWNSTREAM PORT WAKE-UP INT FROM SUSPEND
_ADD_USB_WAKEUP_INT_SUB			MACRO
								ENDM

;6 USB HOST RESUME INT
_ADD_USB_RESUME_INT_SUB			MACRO
								ENDM

;7 USB SOF INT (FOR COUNT TIMEING :1ms)
_ADD_USB_SOF_INT_SUB			MACRO
								ENDM

;8 USB EP1 INT (EP1 DATA MANAGEMENT)
_ADD_USB_EP1_SUB				MACRO
									CALL	ADD_USB_EP1_SUB								
								ENDM

;8.1 USB EP1 WORK MACRO (EP1 OUT/IN DATA MANAGEMENT IN MAIN LOOP)
_ADD_USB_EP1_WORK_SUB			MACRO
									CALL	ADD_USB_EP1_WORK_SUB
								ENDM
								
;9 USB EP2 INT (EP2 DATA MANAGEMENT) 
_ADD_USB_EP2_SUB				MACRO
								BS		BULK_STATE,OUT_USB_FIFO_FULL
								MOV		A,#0X01
								MOV		RAMBS1,A
								MOV		A,#EP2CTR
								MOV		IAP1,A
								
								NOP
								MOV		A,IAC1
								MOV		TEMP1,A
								n_nop
								ENDM

;9.1 USB EP2 WORK SUB (EP2 OUT/IN DATA MANAGEMENT IN MAIN LOOP) 
_ADD_USB_EP2_WORK_SUB			MACRO
									CALL	ADD_USB_EP2_WORK_SUB
								ENDM

;10 USB EP3 INT (EP3 DATA MANAGEMENT)
_ADD_USB_EP3_SUB				MACRO
								ENDM
								
//10.1 USB EP3 WORK SUB (EP3 OUT/IN DATA MANAGEMENT IN MAIN LOOP) 								
_ADD_USB_EP3_WORK_SUB			MACRO
								ENDM

;11 USB EXPAND bmRequestType COMMAND
_ADD_USB_bmRequestType			MACRO	//ADD VENDOR COMMAND
									MOV		A,#0X41	
									XOR		A,TEMP_UREG
									JBS		STTS,Z,RequestType41
									MOV		A,#0XC1		
									XOR		A,TEMP_UREG
									JBS		STTS,Z,RequestTypeC1
								ENDM

;12 USB EXPAND Request COMMAND
;12.1 
_ADD_USB_RT0X00_Request			MACRO
								ENDM

;12.2
_ADD_USB_RT0X01_Request			MACRO
								ENDM

;12.3
_ADD_USB_RT0X02_Request			MACRO
								ENDM

;12.4
_ADD_USB_RT0X80_Request			MACRO
								ENDM

;12.5
_ADD_USB_RT0X81_Request			MACRO
								ENDM

;12.6							
_ADD_USB_RT0X82_Request			MACRO
								ENDM

;12.7							
_ADD_USB_RT0X20_Request			MACRO
								ENDM

;12.8							
_ADD_USB_RT0X21_Request			MACRO
trap
								ENDM

;12.9								
_ADD_USB_RT0X23_Request			MACRO
								ENDM

;12.10							
_ADD_USB_RT0XA0_Request			MACRO
								ENDM

;12.11							
_ADD_USB_RT0XA1_Request			MACRO
								MOV 	A,#0xfe         // get max LUN
								XOR		A,TEMP_UREG
  								JBC		STATUS,Z,UNKNOWN_bRequest
								MOV		A,#0X01
  								MOV		EP0TXCTR,A
  										N_NOP		
								MOV		A,#0X00														
								MOV		EP0TXDAR,A
								BS		EP2CSR,RXTXEN
							;	BC		EP2CSR,SESTALL
									
								RET
								ENDM

;23								
_ADD_USB_RT0XA3_Request			MACRO
								ENDM

;24								
_ADD_USB_DEVICE_CONFIG_OK		MACRO  			
									BS		BULK_STATE,CONFIG
								ENDM

;25								
_ADD_USB_SET_REPORT_SUB			MACRO
							// VENDER COMMAND OUT DATA
									BC		FC_STATUS,DATA_OUT
									MOV		A,EP0RXDAR
									MOV		TEMP1,A
									MOV		A,EP0RXDAR
									/*
									MOV		BULK_OUT_BUFH,A
									MOV		A,EP0RXDAR
									MOV		BULK_OUT_BUFM,A
									MOV		A,EP0RXDAR
									MOV		BULK_OUT_BUFL,A
									
									BS		EP2CSR,RXTXEN	
										N_NOP	
									BS		BULK_STATE,IMAGE_RESTART
									*/
								ENDM

;26
_ADD_USB_GET_REPORT_SUB			MACRO
								ENDM

;27								
_ADD_USB_GET_REPORT_EXP_SUB		MACRO
								ENDM

;28								
_ADD_USB_STRING_INDEX_HM		MACRO
									MOV		A,#High(String_index_HManufacture_table<<1)
 									MOV		TBHPTR,A
 									MOV		A,#Low(String_index_HManufacture_table<<1)
 									MOV		TBLPTR,A
 									JMP		F_TABLE_READ
								ENDM

;29
_ADD_USB_STRING_INDEX_HP		MACRO
									MOV		A,#High(String_index_HProduct_table<<1)
 									MOV		TBHPTR,A
 									MOV		A,#Low(String_index_HProduct_table<<1)
 									MOV		TBLPTR,A
 									JMP		F_TABLE_READ
								ENDM

;30								
_ADD_USB_STRING_INDEX_HS		MACRO
								ENDM

;31								
_ADD_USB_STRING_INDEX_HC		MACRO
								ENDM

;32								
_ADD_USB_STRING_INDEX_HI		MACRO
								ENDM

;33
_ADD_USB_STRING_INDEX_DM		MACRO
								ENDM

;34
_ADD_USB_STRING_INDEX_DP		MACRO
								ENDM

;35								
_ADD_USB_STRING_INDEX_DS		MACRO
								ENDM

;36								
_ADD_USB_STRING_INDEX_DC		MACRO
								ENDM
								
;37
_ADD_USB_STRING_INDEX_DI		MACRO
								ENDM

;38 			
_ADD_USB_HID_DESCRIPTION_SUB	MACRO
	if _USB_HID	==	_ENABLE
									MOV		A,#High(Descriptor_type_21_index00_table<<1)
 									MOV		TBHPTR,A
 									MOV		A,#Low(Descriptor_type_21_index00_table<<1)
 									MOV		TBLPTR,A
 							//table length
									JMP		F_TABLE_READ
	endif
								ENDM

_ADD_USB_HID_DESCRIPTION_SUB1	MACRO
	if _USB_CD_bNumInterface	==	2
									MOV		A,#High(Descriptor_type_21_index01_table<<1)
 									MOV		TBHPTR,A
 									MOV		A,#Low(Descriptor_type_21_index01_table<<1)
 									MOV		TBLPTR,A
 							//table length
									JMP		F_TABLE_READ
	endif
								ENDM

;39 			
_ADD_USB_HID_REPORT_SUB1		MACRO
	if _USB_HID	==	_ENABLE
									MOV		A,#High(Descriptor_type_22_index00_table<<1)
 									MOV		TBHPTR,A
 									MOV		A,#Low(Descriptor_type_22_index00_table<<1)
 									MOV		TBLPTR,A
							//table length
		 							MOV		A,#_USB_HID_wDescriptorLength0
 									MOV		TBLL,A
									JMP		F_TABLE_READ_1
	endif
								ENDM

;40 			
_ADD_USB_HID_REPORT_SUB2		MACRO
	if _USB_CD_bNumInterface	==	2
									MOV		A,#High(Descriptor_type_22_index01_table<<1)
 									MOV		TBHPTR,A
 									MOV		A,#Low(Descriptor_type_22_index01_table<<1)
 									MOV		TBLPTR,A
 							//table length
		 							MOV		A,#_USB_HID_wDescriptorLength1
 									MOV		TBLL,A
									JMP		F_TABLE_READ_1
	endif
								ENDM
 			
;41
_ADD_USB_HID_PHYSCIAL_SUB		MACRO
								ENDM
								
;*********************************************************
ADD_USB_EP1_SUB:								
			BS		BULK_STATE,IN_USB_FIFO_FULL								
			RET	
			
ADD_USB_EP1_WORK_SUB:
			MOV		A,#0X01
			MOV		RAMBS1,A
			MOV		A,#EP1CSR
			MOV		IAP1,A
				NOP
			MOV		A,#EP1CTR
			MOV		IAP1,A
			MOV		A,TEMP1
			MOV		IAC1,A
					
			MOV		A,#EP1DAR
			MOV		IAP1,A
			BC		Flash_Ctrl_Port_B,_CE
EP1_LOOP:
			BC		Flash_Ctrl_Port_B,_RE
			nop
			MOV		A,Flash_Data_Port
			BS		Flash_Ctrl_Port_B,_RE
			MOV		IAC1,A
			DJZ		TEMP1,EP1_LOOP_END
			JMP		EP1_LOOP									
EP1_LOOP_END:
			BS		Flash_Ctrl_Port_B,_CE
			MOV		A,#EP1CSR
			MOV		IAP1,A
				NOP
			n_nop
			BS		IAC1,RXTXEN
				N_NOP
loop_ep1_work_sub:	
		;	jbs		count3,7,exit64bytre
			JBS		IAC1,SESTALL,loop_ep1_work_sub
			JBS		IAC1,RXTXEN,loop_ep1_work_sub
exit64bytre:
			jBc		BULK_STATE,IN_USB_FIFO_FULL,$
			Bc		BULK_STATE,IN_USB_FIFO_FULL	
				;	trap
									NOP

			RET							
												
;*********************************************************
ADD_USB_EP2_WORK_SUB:
			MOV		A,#0X01
			MOV		RAMBS1,A
			MOV		A,#EP2CSR
			MOV		IAP1,A
				NOP			

			MOV		A,#EP2DAR
			MOV		IAP1,A
				NOP
EP2_LOOP:
			MOV		A,IAC1
			MOV		IAC0,A
			DJZ		TEMP1,EP2_LOOP_END
			JMP		EP2_LOOP
EP2_LOOP_END:									
			MOV		A,#EP2CSR
			MOV		IAP1,A
				NOP	
			BS		IAC1,RXTXEN
				N_NOP
EP2_RET:	bc		iac1,1
			RET

;*********************************************************								
;==========================================================
//Decode Ve Vendor Command
;=========================================================
RequestTypeC1:								//C1 B2 COMMAND --> RETURN BULK IN DATA LENGTH
 //BULK	IN
			MOV		A,IAC0
			MOV		TEMP_UREG,A
			MOV		A,#0XB2					// bRequest
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,HOST_BULK_IN_CHK
			JMP		UNKNOWN_bRequest

RequestType41:								//41 B3 COMMAND --> BULK OUT BEGIN
 //BULK OUT
			MOV		A,IAC0
			MOV		TEMP_UREG,A
			MOV		A,#0XB3
			XOR		A,TEMP_UREG
			JBS		STATUS,Z,HOST_BULK_OUT_CHK  			
  			JMP		UNKNOWN_bRequest

HOST_BULK_IN_CHK:
/*
			MOV		A,#0X04
  			MOV		EP0TXCTR,A
  				N_NOP		
			MOV		A,#0X00														
			MOV		EP0TXDAR,A	
				N_NOP
			MOV		A,BULK_IN_BUFH														
			MOV		EP0TXDAR,A	
				N_NOP
			MOV		A,BULK_IN_BUFM													
			MOV		EP0TXDAR,A	
				N_NOP
			MOV		A,BULK_IN_BUFL													
			MOV		EP0TXDAR,A	
				N_NOP			
			BS		BULK_STATE,BEGIN_PUT_EP1_DATA	
			*/	
			RET
			
HOST_BULK_OUT_CHK:
			BS		FC_STATUS,DATA_OUT
			RET	


/*
INC_ADD_TEMP1:
		JBS		STTS,C,INC_ADD_TEMP2	
		RET		
INC_ADD_TEMP2:
		INC		ADD_TEMP2
		JBS		STTS,C,INC_ADD_TEMP3
		RET
INC_ADD_TEMP3:
		INC		ADD_TEMP3
		JBC		ADD_TEMP3,1,$+3
		CLR		ADD_TEMP3
		RET
	*/	

		
// **********************************************
// Macro Sub N_NOP
// **********************************************
N_NOP_DELAY:
	if _USB_LOW_SPEED	==	_DISABLE
			nop
			nop
			NOP
			RET
	else
		///////12M
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			RET
	endif

busresetsub:
			mov		a,temp3
			jbc		stts,z,skipreset
			mov		a,read_block_no
			jbc		stts,z,skipreset
			;	trap
skipreset:
			ret	

⌨️ 快捷键说明

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