亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? logo.asm

?? 利用CY單片機CY7C637XX編寫的USB鼠標程序
?? ASM
?? 第 1 頁 / 共 3 頁
字號:
			mov 	A, EP0_INT				; turn off endpoint 1 interrupts
			iowr 	endpoint_int
			jmp		set_device_configuration_done
		configure_device:					; set device as configured
			mov		[configuration], A

			mov		A, [ep1_stall]			; if endpoint 1 is stalled
			and		A, FFh
			jz		ep1_nak_in_out
				mov		A, STALL_IN_OUT		; set endpoint 1 mode to stall
				iowr	ep1_mode
				jmp		ep1_set_int
			ep1_nak_in_out:
				mov		A, NAK_IN_OUT		; otherwise set it to NAK in/out
				iowr	ep1_mode
			ep1_set_int:
			mov 	A, EP0_INT | EP1_INT	; enable endpoint 1 interrupts		
			iowr 	endpoint_int
			mov		A, 00h
			mov		[ep1_data_toggle], A	; reset the data toggle
			mov		[ep1_dmabuff0], A		; reset endpoint 1 fifo values
			mov		[ep1_dmabuff1], A
			mov		[ep1_dmabuff2], A
			set_device_configuration_done:
			mov		A, NO_CHANGE_PENDING
			mov		[ep0_in_flag], A
			jmp		initialize_no_data_control


	get_device_status:						; GET STATUS
		mov		A, DEVICE_STATUS_LENGTH
		mov		[maximum_data_count], A
		mov		A, (device_status_wakeup_disabled - control_read_table)
		mov		[data_start], A
		jmp		initialize_control_read
		

	get_device_descriptor:					; GET DESCRIPTOR
		mov		A, [wValuehi]
		asl		A
		jacc	get_device_descriptor_jumptable

		send_device_descriptor:
			mov		A, 00h					; get device descriptor length
			index	        device_desc_table
			mov		[maximum_data_count], A
			mov		A, (device_desc_table - control_read_table)
			mov		[data_start], A
			jmp		initialize_control_read

		send_configuration_descriptor:
			mov		A, 02h
   			index	config_desc_table:
			mov		[maximum_data_count], A
			mov		A, (config_desc_table - control_read_table)
			mov		[data_start], A
			jmp		initialize_control_read

		send_string_descriptor:
			mov		A, [wValuelo]
			asl		A
			jacc	string_jumptable:

			language_string:
				mov		A, 00h
				index	ilanguage_string
				mov		[maximum_data_count], A
				mov		A, (ilanguage_string - control_read_table)
				mov		[data_start], A
				jmp		initialize_control_read

			manufacturer_string:
				mov		A, 00h
				index	imanufacturer_string
				mov		[maximum_data_count], A
				mov		A, (imanufacturer_string - control_read_table)
				mov		[data_start], A
				jmp		initialize_control_read

			product_string:
				mov		A, 00h
				index	iproduct_string
				mov		[maximum_data_count], A
				mov		A, (iproduct_string - control_read_table)
				mov		[data_start], A
				jmp		initialize_control_read

			serial_string:
				mov		A, 00h
				index	iserialnumber_string
				mov		[maximum_data_count], A
				mov		A, (iserialnumber_string - control_read_table)
				mov		[data_start], A
				jmp		initialize_control_read

			configuration_string:
				mov		A, 00h
				index	iconfiguration_string
				mov		[maximum_data_count], A
				mov		A, (iconfiguration_string - control_read_table)
				mov		[data_start], A
				jmp		initialize_control_read

		send_interface_descriptor:
			mov		A, 00h					; get interface descriptor length
			index	interface_desc_table 
			mov		[maximum_data_count], A
			mov		A, (interface_desc_table - control_read_table)
			mov		[data_start], A
			jmp		initialize_control_read

		send_endpoint_descriptor:
			mov		A, 00h					; get endpoint descriptor length
			index	endpoint_desc_table
			mov		[maximum_data_count], A
			mov		A, (endpoint_desc_table - control_read_table)
			mov		[data_start], A
			jmp		initialize_control_read


		get_device_configuration:			; GET CONFIGURATION
			mov		A, DEVICE_CONFIG_LENGTH
			mov		[maximum_data_count], A
			mov		A, [configuration]		; test configuration status
			and		A, FFh
			jz		device_unconfigured
			device_configured:				; send configured status
				mov		A, (device_configured_table - control_read_table)
				mov		[data_start], A
				jmp		initialize_control_read
			device_unconfigured:				; send unconfigured status
				mov		A, (device_unconfigured_table - control_read_table)
				mov		[data_start], A
				jmp		initialize_control_read


	;;************ INTERFACE REQUESTS ***********

	set_interface_interface:				; SET INTERFACE
		mov		A, [wValuelo]
		cmp		A, 00h						; there are no alternate interfaces
		jz		alternate_supported			; for this device
		alternate_not_supported:			; if the host requests any other
			jmp		request_not_supported	; alternate than 0, stall.	
		alternate_supported:
			mov		A, NO_CHANGE_PENDING
			mov		[ep0_in_flag], A
			jmp		initialize_no_data_control


	get_interface_status:					; GET STATUS
		mov		A, INTERFACE_STATUS_LENGTH
		mov		[maximum_data_count], A
		mov		A, (interface_status_table - control_read_table)
		mov		[data_start], A
		jmp		initialize_control_read
		

	get_interface_interface:				; GET INTERFACE
		mov		A, INTERFACE_ALTERNATE_LENGTH
		mov		[maximum_data_count], A
		mov		A, (interface_alternate_table - control_read_table)
		mov		[data_start], A
		jmp		initialize_control_read


	set_interface_idle:						; SET IDLE
		mov		A, [wValuehi]				; test if new idle time 
		cmp		A, 00h						; disables idle timer
		jz		idle_timer_disable

		mov		A, [idle_timer]				; test if less than 4ms left
		cmp		A, 01h
		jz		set_idle_last_not_expired

		mov		A, [wValuehi]				; test if time left less than
		sub		A, [idle_timer]				; new idle value
		jnc		set_idle_new_timer_less

		jmp		set_idle_normal

		idle_timer_disable:
			mov		[idle], A				; disable idle timer
			jmp		set_idle_done

		set_idle_last_not_expired:
			mov		A, EVENT_PENDING		; send report immediately
			mov		[event_machine], A
			mov		A, 00h					; reset idle prescaler
			mov		[idle_prescaler], A
			mov		A, [wValuehi]			; set new idle value
			mov		[idle_timer], A
			mov		[idle], A
			jmp		set_idle_done

		set_idle_new_timer_less:			
			mov		A, 00h
			mov		[idle_prescaler], A		; reset idle prescaler
			mov		A, [wValuehi]
			mov		[idle_timer], A			; update idle time value
			mov		[idle], A
			jmp		set_idle_done

		set_idle_normal:
			mov		A, 00h					; reset idle prescaler
			mov		[idle_prescaler], A
			mov		A, [wValuehi]			; update idle time value
			mov		[idle_timer], A
			mov		[idle], A

		set_idle_done:
			mov		A, NO_CHANGE_PENDING	; respond with no-data control
			mov		[ep0_in_flag], A		; transaction
			jmp		initialize_no_data_control


	set_interface_protocol:					; SET PROTOCOL
		mov		A, [wValuelo]
		mov		[protocol], A				; set protocol value
		mov		A, NO_CHANGE_PENDING
		mov		[ep0_in_flag], A			; respond with no-data control
		jmp		initialize_no_data_control	; transaction


	get_interface_report:					; GET REPORT
		mov		A, DATA_TOGGLE				; set data toggle to DATA ONE
		mov		[ep0_data_toggle], A
		mov		A, NAK_IN_OUT				; clear setup bit to write to
		iowr	ep0_mode					; endpoint fifo

		mov		A, [ep1_dmabuff0]			; copy over button data
		mov		[ep0_dmabuff0], A

		mov		A, [ep1_dmabuff1]			; copy horizontal data
		mov		[ep0_dmabuff1], A

		mov		A, [ep1_dmabuff2]			; copy vertical data
		mov		[ep0_dmabuff2], A

		mov		A, CONTROL_READ_DATA		; set state machine state
		mov		[ep0_in_machine], A			
		mov		X, 03h						; set number of byte to transfer to 3
		jmp		dmabuffer_load_done			; jump to finish transfer
		
	
	get_interface_idle:						; GET IDLE
		mov		A, DATA_TOGGLE				; set data toggle to DATA ONE
		mov		[ep0_data_toggle], A
		mov		A, NAK_IN_OUT				; clear setup bit to write to
		iowr	ep0_mode					; endpoint fifo

		mov		A, [idle]					; copy over idle time
		mov		[ep0_dmabuff0], A

		mov		A, CONTROL_READ_DATA		; set state machine state
		mov		[ep0_in_machine], A			
		mov		X, 01h						; set number of byte to transfer to 3
		jmp		dmabuffer_load_done			; jump to finish transfer

	
	get_interface_protocol:					; GET PROTOCOL
		mov		A, INTERFACE_PROTOCOL_LENGTH
		mov		[maximum_data_count], A		; get offset of device descriptor table
		mov		A, [protocol]
		and		A, 01h
		jz		boot_protocol
		report_protocol:
			mov		A, (interface_report_protocol - control_read_table)
			mov		[data_start], A
			jmp		initialize_control_read	; get ready to send data
		boot_protocol:
			mov		A, (interface_boot_protocol - control_read_table)
			mov		[data_start], A
			jmp		initialize_control_read	; get ready to send data


	get_interface_hid:
		mov		A, [wValuehi]
		cmp		A, 21h
		jz		get_interface_hid_descriptor
		cmp		A, 22h
		jz		get_interface_hid_report
		jmp		request_not_supported

	get_interface_hid_descriptor:			; GET HID CLASS DESCRIPTOR
		mov		A, 00h						; get hid decriptor length
		index	hid_desc_table
		mov		[maximum_data_count], A		; get offset of device descriptor table
		mov		A, (hid_desc_table - control_read_table)
		mov		[data_start], A
		jmp		initialize_control_read		; get ready to send data


	get_interface_hid_report:				; GET HID REPORT DESCRIPTOR
		mov		A, 07h						; get hid report descriptor length
		index	hid_desc_table
		mov		[maximum_data_count], A		; get offset of device descriptor table
		mov		A, (hid_report_desc_table - control_read_table)
		mov		[data_start], A
		jmp		initialize_control_read		; get ready to send data


	;;************ ENDPOINT REQUESTS ************

	clear_endpoint_feature:					; CLEAR FEATURE
		mov		A, [wValuelo]
		cmp		A, ENDPOINT_STALL
		jnz		request_not_supported		
		mov		A, 00h						; clear endpoint 1 stall
		mov		[ep1_stall], A
		mov		A, NO_CHANGE_PENDING		; respond with no-data control
		mov		[ep0_in_flag], A
		jmp		initialize_no_data_control

	set_endpoint_feature:					; SET FEATURE
		mov		A, [wValuelo]
		cmp		A, ENDPOINT_STALL
		jnz		request_not_supported		
		mov		A, FFh						; stall endpoint 1
		mov		[ep1_stall], A
		mov		A, NO_CHANGE_PENDING		; respond with no-data control
		mov		[ep0_in_flag], A
		jmp		initialize_no_data_control

	get_endpoint_status:					; GET STATUS
		mov		A, ENDPOINT_STALL_LENGTH
		mov		[maximum_data_count], A
		mov		A, [ep1_stall]				; test if endpoint 1 stalled
		and		A, FFh
		jnz		endpoint_stalled
		endpoint_not_stalled:				; send no-stall status
			mov		A, (endpoint_nostall_table - control_read_table)
			mov		[data_start], A
			jmp		initialize_control_read
		endpoint_stalled:					; send stall status
			mov		A, (endpoint_stall_table - control_read_table)
			mov		[data_start], A
			jmp		initialize_control_read
		
;;***************** CONTROL READ TRANSACTION **************

	initialize_control_read:
		mov		A, TRANS_CONTROL_READ		; set transaction type to control read
		mov		[ep0_transtype], A

		mov		A, DATA_TOGGLE				; set data toggle to DATA ONE
		mov		[ep0_data_toggle], A

		; if wLengthhi == 0
		mov		A, [wLengthhi]				; find lesser of requested and maximum
		cmp		A, 00h
		jnz		initialize_control_read_done
		; and wLengthlo < maximum_data_count
		mov		A, [wLengthlo]				; find lesser of requested and maximum
		cmp		A, [maximum_data_count]		; response lengths
		jnc		initialize_control_read_done
		; then maximum_data_count >= wLengthlo
		mov		A, [wLengthlo]
		mov		[maximum_data_count], A
		initialize_control_read_done:
			jmp		control_read_data_stage	; send first packet


;;***************** CONTROL WRITE TRANSACTION *************

	initialize_control_write:
		mov		A, TRANS_CONTROL_WRITE		; set transaction type to control write
		mov		[ep0_transtype], A

		mov		A, DATA_TOGGLE				; set accepted data toggle
		mov		[ep0_data_toggle], A
		mov		A, ACK_OUT_NAK_IN			; set mode
		iowr	ep0_mode
		pop		A
		pop		X
		reti


;;***************** NO DATA CONTROL TRANSACTION ***********

	initialize_no_data_control:
		mov		A, TRANS_NO_DATA_CONTROL	; set transaction type to no data control
		mov		[ep0_transtype], A

		mov		A, STATUS_IN_ONLY			; set SIE for STATUS IN mode
		iowr	ep0_mode
		pop		A
		pop		X
		reti


;;***************** UNSUPPORTED TRANSACTION ***************

	request_not_supported:
		iord	ep0_mode
		mov	A, STALL_IN_OUT					; send a stall to indicate that the request
		iowr	ep0_mode					; is not supported
		pop	A
		pop	X
		reti


;**********************************************************

	;**********************************
	; IN - CONTROL READ DATA STAGE
	;	 - CONTROL WRITE STATUS STAGE
	;	 - NO DATA CONTROL STATUS STAGE

	ep0_in_received:
	mov		A, [ep0_transtype]
	jacc	ep0_in_jumptable


	;**********************************

	control_read_data_stage:
		mov		X, 00h

		mov		A, [maximum_data_count]
		cmp		A, 00h						; has all been sent
		jz		dmabuffer_load_done			

		dmabuffer_load:
			mov		A, X					; check if 8 byte ep0 dma
			cmp		A, 08h					; buffer is full
			jz		dmabuffer_load_done

			mov		A, [data_start]			; read data from desc. table
			index	control_read_table
			mov		[X + ep0_dmabuff0], A

			inc		X						; increment buffer offset
			inc		[data_start]			; increment descriptor table pointer
			dec		[maximum_data_count]	; decrement number of bytes requested
			jz		dmabuffer_load_done
			jmp		dmabuffer_load			; loop to load more data
			dmabuffer_load_done:
	
		iord	ep0_count					; unlock counter register
		mov		A, X						; find number of bytes loaded
		or		A, [ep0_data_toggle]		; or data toggle
		iowr	ep0_count					; write ep0 count register

		mov		A, ACK_IN_STATUS_OUT		; set endpoint mode to ack next IN
		iowr	ep0_mode					; or STATUS OUT
			
		mov		A, DATA_TOGGLE				; toggle data toggle
		xor		[ep0_data_toggle], A

		pop		A
		pop		X
		reti


	;**********************************

	control_write_status_stage:
		mov		A, STATUS_OUT_ONLY
		iowr	ep0_mode

		mov		A, TRANS_NONE
		mov		[ep0_transtype], A

		pop		A
		pop		X
		reti


	;**********************************

	no_data_control_status_stage:
		mov		A, [ep0_in_flag]		; end of no-data control transaction 
		cmp		A, ADDRESS_CHANGE_PENDING

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丝袜美腿成人在线| 欧美国产成人在线| 天堂在线一区二区| 日本一区二区免费在线| 久久er99精品| 久久久久久久综合色一本| 国产一区二区不卡| 国产精品蜜臀在线观看| 99久久久无码国产精品| 一个色在线综合| 69av一区二区三区| 国产在线精品视频| 国产精品久久久久久久岛一牛影视| 99国产精品久久久久久久久久久| 亚洲精品视频一区| 欧美日韩亚洲综合在线| 美脚の诱脚舐め脚责91| 久久久久国产精品麻豆| 91丨porny丨中文| 亚洲成人av在线电影| 精品三级在线看| 国产精品99久| 一区二区三区国产豹纹内裤在线| 91精品中文字幕一区二区三区| 激情深爱一区二区| 成人欧美一区二区三区| 9191成人精品久久| 国产精品996| 亚洲国产精品一区二区www在线| 欧美大片一区二区| 色综合天天性综合| 九九热在线视频观看这里只有精品| 国产免费久久精品| 欧美精品九九99久久| 国产宾馆实践打屁股91| 亚洲国产精品久久久久婷婷884 | 国产成人精品aa毛片| 成人欧美一区二区三区1314| 欧美美女bb生活片| 不卡的av中国片| 久久精品国产**网站演员| 亚洲欧洲精品成人久久奇米网| 555夜色666亚洲国产免| 91在线视频官网| 久久99精品一区二区三区三区| 亚洲免费看黄网站| 久久久久97国产精华液好用吗| 欧美日韩一区三区四区| 成人精品视频.| 久久99国产精品久久| 亚洲午夜在线观看视频在线| 国产欧美日韩视频在线观看| 欧美男人的天堂一二区| 91免费看片在线观看| 精品亚洲成a人| 亚洲成av人片www| 亚洲视频一区二区在线观看| 久久久久久麻豆| 日韩欧美亚洲另类制服综合在线| 日本韩国欧美在线| 99久久99久久综合| 国产白丝网站精品污在线入口| 奇米精品一区二区三区在线观看一| 亚洲精品va在线观看| 国产精品你懂的在线| 欧美精品一区二区三区在线| 欧美福利视频一区| 精品视频123区在线观看| 91美女精品福利| 暴力调教一区二区三区| 国产成人在线色| 国产一区999| 国产一区二区三区在线观看精品| 日本中文字幕一区二区有限公司| 亚洲线精品一区二区三区八戒| 亚洲婷婷在线视频| 亚洲日本在线天堂| 亚洲色图欧美激情| 亚洲男人的天堂在线aⅴ视频| 国产精品成人在线观看| 国产精品三级av| 国产精品乱码久久久久久| 久久久亚洲精品石原莉奈| 久久人人97超碰com| 久久久精品一品道一区| 国产亚洲成aⅴ人片在线观看 | 色综合久久中文字幕| 91免费在线视频观看| 色婷婷亚洲综合| 在线一区二区三区| 欧美三区在线观看| 欧美一区二区三区视频在线| 日韩视频在线一区二区| 精品国产精品网麻豆系列| 久久精品一区四区| 国产精品福利影院| 一区二区三区欧美久久| 亚洲成人1区2区| 青青草原综合久久大伊人精品优势 | 91丨九色丨国产丨porny| 色婷婷精品久久二区二区蜜臂av| 欧美日精品一区视频| 欧美美女黄视频| 亚洲精品在线免费播放| 亚洲欧洲在线观看av| 亚洲成a人片在线不卡一二三区| 日韩高清不卡一区二区三区| 精品在线观看视频| 99视频精品全部免费在线| 欧美系列亚洲系列| 日韩精品一区二区三区在线| 国产亚洲一区二区在线观看| 亚洲品质自拍视频网站| 日本va欧美va瓶| 成人在线综合网| 欧美午夜一区二区三区免费大片| 91精品国产福利在线观看| 国产欧美一区二区精品性色 | 亚洲成在线观看| 久久国产精品一区二区| 国产999精品久久久久久绿帽| 色哟哟欧美精品| 精品av久久707| 亚洲美女少妇撒尿| 黑人精品欧美一区二区蜜桃| 9i在线看片成人免费| 制服.丝袜.亚洲.中文.综合| 国产欧美日韩亚州综合| 午夜婷婷国产麻豆精品| 国产高清久久久| 欧美理论电影在线| 最新久久zyz资源站| 毛片av一区二区| 91视频免费播放| 精品国产乱码久久久久久久| 亚洲综合色在线| 国产99久久久精品| 在线综合+亚洲+欧美中文字幕| 国产精品网站在线观看| 免费高清成人在线| 色88888久久久久久影院野外| 久久亚洲综合色一区二区三区| 一区二区三区在线影院| 国产成人亚洲综合a∨婷婷图片| 欧美日韩一卡二卡三卡| 亚洲国产精品激情在线观看| 蜜臀精品一区二区三区在线观看| 北条麻妃一区二区三区| 久久久久综合网| 日韩成人精品在线| 日本精品一级二级| 国产精品成人一区二区三区夜夜夜 | 1区2区3区欧美| 国产酒店精品激情| 91麻豆精品国产91久久久使用方法 | 欧美一区二区福利在线| 一区二区三区毛片| 99久久精品免费观看| 国产免费观看久久| 狠狠狠色丁香婷婷综合激情| 91精品国产色综合久久不卡蜜臀| 亚洲综合一区在线| 91色视频在线| 亚洲欧美日韩国产成人精品影院| 丁香婷婷综合网| 国产农村妇女毛片精品久久麻豆 | 日韩高清不卡在线| 欧美精品久久99| 视频一区视频二区在线观看| 欧美日韩在线一区二区| 一区二区三区国产| 91国偷自产一区二区使用方法| 1区2区3区欧美| 99国产精品国产精品久久| 国产精品久久久久久久第一福利| 国产美女在线精品| 久久久精品综合| 成人国产精品免费网站| 亚洲国产精品t66y| av午夜一区麻豆| 一区二区在线电影| 欧美日韩亚洲综合| 免费在线看一区| 欧美成人午夜电影| 国产麻豆视频精品| 久久日韩粉嫩一区二区三区| 国产精品88888| 1000部国产精品成人观看| 色欧美88888久久久久久影院| 亚洲一区二区成人在线观看| 欧美日韩一区二区三区四区| 日韩精品五月天| 欧美精品一区二区三区四区| 福利视频网站一区二区三区| 综合自拍亚洲综合图不卡区| 欧美色涩在线第一页| 日韩电影在线观看电影| 久久精品亚洲一区二区三区浴池 | 91在线观看高清| 丝袜a∨在线一区二区三区不卡|