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

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

?? sn8_usb_module.lib

?? Sonix新出的MCU SN8F2255的USB的HID庫。
?? LIB
?? 第 1 頁 / 共 3 頁
字號:
;**************************************************************************************
;
;			<USB MODULE> USB SIE
;--------------------------------------------------------------------------------------
;EP0  
;---
;Include	1. Control_Handler (For EP0 setup token)
;		2. Standard_Request (For USB standard command)
;		3. HID_Request	(USB HID command)
;		4. Data_structure (EP0 SETUP, IN , OUT)
;		5. Bus Reset function
;		6. USB suspend function
;		7. Remote wakeup function
;		8. USB EP0~EP2's FIFO R/W function 
;---------------------------------------------------------------------------------------
;Other Endpoints
;---------------
;EP1 
;EP2
;***************************************************************************************

Bus_Reset:
;---------------------------------------------------------------
;NOTE!! Keep USB enable after Bus_reset and set USB address to 0
;---------------------------------------------------------------	
		mov	a,#0x80		;enable USB & and set USB address = 0	
		b0mov	UDA,a		
		clr	UDP0		;set FIFO address to EP0
		clr	UDR0_R
		clr	UDR0_W
		b0bclr	bSetAddress	;bus reset clear bSet_address
		b0bclr	bAlreadySetAddr 			
		clr	BSetConfiguration
		clr	UStatus
		clr	EP0OUT_CNT	
		mov	a, #0x0
		b0mov	UE0R,a		
		b0mov	UE1R,a
		jmp	isr_90



// ---------------------- //
//  USB Suspend function  //
// ---------------------- //
USB_Suspend:	
;------------------------------------------------------------------
;NOTE!!	USER can define MCU's mode when USB suspend occur.
;	This demo code set the MCU go into SLEEP.
;------------------------------------------------------------------

		b0mov	a, P0
		b0mov	Wakeup_IO_status,a
		b0bclr	bSuspend		
		
		b0bset	FCLKMD		; Enter Slow Mode
		b0bset	FSTPHX
USB_Suspend_10:
		@RST_WDT
		b0bts1	FSUSPEND
		jmp	USB_Suspend_20	
		b0bts1	bRemote_Wakeup	; Check if support Remote wakeup
		jmp	USB_Suspend_10
		b0mov	a, P0		; Check if P0 status changes
		cmprs	a, Wakeup_IO_status
		jmp	USB_Suspend_90	
		jmp	USB_Suspend_10

USB_Suspend_20:
		b0bclr	FSTPHX
;------------------------------------------------------------------
; NOTE! From Slow to Normal Mode, the 6M X'tal stable time needs 
;	almost 7ms. The delay function below delays almost 8ms.
;------------------------------------------------------------------
		mov	a,#0x07
		b0mov	z,a
@@:
		decms	z
		jmp	@b
		b0bclr	FCLKMD
		ret
		
USB_Suspend_90:
		b0bclr	FSTPHX
;------------------------------------------------------------------
; NOTE! From Slow to Normal Mode, the 6M X'tal stable time needs 
;	almost 7ms. The delay function below delays almost 8ms. 
;------------------------------------------------------------------
		mov	a,#0x07
		b0mov	z,a
@@:
		decms	z
		jmp	@b
		b0bclr	FCLKMD	
		jmp	Remote_Wakeup

// ------------------- //
//  USB Remote_wakeup  //
// ------------------- //
Remote_Wakeup:	
		mov	a,#0x01
		cmprs	a,bSetConfiguration	; Check if Configured_State
		jmp	USB_Suspend_10

		b0bclr	FGIE
		mov	a, #11000110b	 ;j state ;Full speed D+ > 0, D- <0		
		b0mov	upid, a		 
		call	delay_for_j_state		
		mov	a, #11000101b	 ;k state	
		b0mov	upid, a	
		call	delay_for_k_state;SPEC require 1ms ~ 15ms			
		mov	a, #11000010b	 ;recovery, disable driving USB BUS
		b0mov	upid,a		
		b0bclr	INTRQ.0		 ;clear Key wakeup 
		b0bclr	INTRQ.6		 ;clear USB interrupt request
		b0bset	FGIE
		ret
;**************************************************************************************
;	USB Delay function for remote wakeup control D+ D-
;======================================================================================
; User must define the parameter USB_REMOTE_WAKEUP_K_STATE_DELAY in SN8_USB_Setting.asm
;**************************************************************************************

delay_for_j_state:
	mov	a,#0ffh
	b0mov	z,a
	mov	a,#0X01
	b0mov	r,a
@@:	DECMS	Z
	jmp @B
	DECMS	R
	jmp @B
	ret

delay_for_k_state:
	mov	a,#0ffh
	b0mov	z,a
	mov	a,#USB_REMOTE_WAKEUP_K_STATE_DELAY
	b0mov	r,a
@@:	DECMS	Z
	jmp @B
	DECMS	R
	jmp @B
	ret

;***********************************************************************
;		USB EP0 SETUP, IN, OUT
;***********************************************************************
;***********************************************************************
;		Data Structure (contain 2 parts)
;-----------------------------------------------------------------------
;	1. Parse the setup token command
;	   <Parse the command and save the command to the relative RAM>
;	   a. bmRequestType
;	   b. bRequest
;	   c. wValue_H, wValue_L
;	   d. wIndex_H, wIndex_L
;	   e. wLength_H, wLength_L
;		
;	2. Write DATA in to data and send it out to host (IN Token command)
;	   (If data > 8 bytes, the code will divide it automatically and 
;	    write to the FIFO every 8 bytes)
;	
;***********************************************************************
// ====================================================================== //
//  		EP1 & EP2 ACK transcation.			 	  //
// ====================================================================== //
EP1_ACK:	
		b0bclr	EP_ACK.0
		jmp	isr_90

// ====================================================================== //
//  		1.Setup token & Parse the COMMAND			  //
// ====================================================================== //
		
EP0_Setup:
		b0bclr 	UStatus.2		;clear EP0_SETUP interrupt flag.
		b0bclr	UE0R.5			;keep EP0 NAK state in the first place.

ReadEP0Buffer:		
		mov	a, #0x0			
		CALL	EP0_FIFO_RD_addr_set
		CALL	EP0_FIFO_RD_data		
		b0mov	bmRequestType, a
		mov	a, #0x1			
		CALL	EP0_FIFO_RD_addr_set
		CALL	EP0_FIFO_RD_data		
		b0mov	bRequest, a
		mov	a, #0x2			
		CALL	EP0_FIFO_RD_addr_set
		CALL	EP0_FIFO_RD_data		
		b0mov	wValue_L, a
		mov	a, #0x3			
		CALL	EP0_FIFO_RD_addr_set
		CALL	EP0_FIFO_RD_data		
		b0mov	wValue_H, a
		mov	a, #0x4			
		CALL	EP0_FIFO_RD_addr_set
		CALL	EP0_FIFO_RD_data		
		b0mov	wIndex_L, a
		mov	a, #0x5			
		CALL	EP0_FIFO_RD_addr_set
		CALL	EP0_FIFO_RD_data		
		b0mov	wIndex_H, a
		mov	a, #0x6			
		CALL	EP0_FIFO_RD_addr_set
		CALL	EP0_FIFO_RD_data		
		b0mov	wLength_L, a
		mov	a, #0x7			
		CALL	EP0_FIFO_RD_addr_set
		CALL	EP0_FIFO_RD_data		
		b0mov	wLength_H, a
			
;		call	Control_Handler	

// ==================================================================================== //	
// ==================================================================================== //
// 			USB Command request function
// ==================================================================================== //
// ==================================================================================== //
Control_Handler:
		b0mov	a, bmRequestType	; check Request Type
		and	a, #01100000b		; mask bits 5,6
		cmprs	a, #00100000b		; check the command
		jmp	Standard_Request	
		jmp	HID_Request

;***********************************************************************
;		Start standard request
;***********************************************************************
Standard_Request:
		and	a, #REQUEST_TYPE_MASK
		b0bts1	FZ
		jmp	Request_Not_Support
		b0mov	a, bRequest			; find Request
		and	a, #0x0f
		add	PCL, a
		jmp	get_status			; 0x00
		jmp	clear_feature			; 0x01
		jmp	Request_Not_Support		; 0x02
		jmp	set_feature			; 0x03
		jmp	Request_Not_Support		; 0x04
		jmp	set_address			; 0x05
		jmp	get_descriptor			; 0x06
		jmp	set_descriptor			; 0x07
		jmp	get_configuration		; 0x08
		jmp	set_configuration		; 0x09
		jmp	get_interface			; 0x0a
		jmp	set_interface			; 0x0b
		nop					; 0x0c
		nop					; 0x0d
		nop					; 0x0e
		jmp	Request_Not_Support		
control_handler_90:		
		;ret


		jmp	isr_90

// ====================================================================== //
//  		EP0 IN token 						  //
// ====================================================================== //

EP0_In:			
		b0bclr  UStatus.1

		b0bts0	set_report_feature_arrival
		jmp	EP0_In_set_report_feature_done

		b0bts0	bAlreadySetAddr
		jmp	EP0_In_10
		b0bts1	bSetAddress
		jmp	EP0_In_10
		b0mov	a, bdevice_address	; Set Address
		or	a, #0x80
		b0mov	UDA, a	
		b0bset	bAlreadySetAddr
EP0_In_10:


		b0mov	a, wLength_H
		or	a, wLength_L
		b0bts0	FZ
		jmp	isr_90			; 0 in packet (stage status response)		
		b0bts0	bmRequestType.7		; check if "IN" token require
		jmp	EP0_In_done		; EP0 in token
		jmp	isr_90		
EP0_In_done:					; EP0 IN token start!
		call	table_transmit
		jmp	EP0_In_done_90

EP0_In_set_report_feature_done:
		b0bclr	set_report_feature_arrival
		;b0bset	set_report_feature_done
		b0mov	a,SET_REPORT_FEATURE_Buf[0]	
		cmprs	a, #RETURN_KERNEL_0
		jmp	EP0_In_done_90
		b0mov	a,SET_REPORT_FEATURE_Buf[1]	
		cmprs	a, #RETURN_KERNEL_1
		jmp	EP0_In_done_90
		b0mov	a,SET_REPORT_FEATURE_Buf[2]	
		cmprs	a, #RETURN_KERNEL_2
		jmp	EP0_In_done_90
		b0mov	a,SET_REPORT_FEATURE_Buf[3]	
		cmprs	a, #RETURN_KERNEL_3
		jmp	EP0_In_done_90
		b0mov	a,SET_REPORT_FEATURE_Buf[4]	
		cmprs	a, #RETURN_KERNEL_4
		jmp	EP0_In_done_90
		b0mov	a,SET_REPORT_FEATURE_Buf[5]	
		cmprs	a, #RETURN_KERNEL_5
		jmp	EP0_In_done_90
		b0mov	a,SET_REPORT_FEATURE_Buf[6]	
		cmprs	a, #RETURN_KERNEL_6
		jmp	EP0_In_done_90
		b0mov	a,SET_REPORT_FEATURE_Buf[7]	
		cmprs	a, #RETURN_KERNEL_7
		jmp	EP0_In_done_90

		b0mov	a, STKP
		and	a, #0x07
		add	a, #0x01
		b0mov	z,a 
		b0add	z,a 	; Use z for stack index
		mov	a, #0xF0
		add	a, z	
	
		b0mov	z, a
		b0mov	y, #0x0
		mov	a, #_Back_To_Kernel_Mode$L
		b0mov	@yz, a
		incms	z
		nop
		mov	a, #_Back_To_Kernel_Mode$M
		b0mov	@yz, a
		ret

EP0_In_done_90:
		jmp	Isr_90

// ====================================================================== //
//  		EP0 OUT token 						  //
// ====================================================================== //

EP0_OUT:	
		b0bclr UStatus.0		;clear EP0 OUT interrupt flag

		b0bts0	set_report_feature_flag
		jmp	_EP0_OUT_STATUS_set_report_feature

		b0bts1	set_report_flag		;check "SET REPORT command"
		jmp	_EP0_OUT_STATUS_Stage
		b0bclr	set_report_flag			
		EP0_RD_RAM_addr_set #0x0	;READ EP0 FIFO, START from 0x0
		EP0_RD_RAM_to_A			;move data to A
		mov SET_REPORT_BYTE_0,a		;save data to SET_REPORT_BYTE_0	

		jmp	_EP0_OUT_STATUS_Stage
_EP0_OUT_STATUS_set_report_feature:

		EP0_RD_RAM_addr_set #0x0	;READ EP0 FIFO, START from 0x0
		EP0_RD_RAM_to_A			;move data to A
		mov SET_REPORT_FEATURE_Buf[0],a		;save data to SET_REPORT_BYTE_0			
		EP0_RD_RAM_addr_set #0x1
		EP0_RD_RAM_to_A
		mov SET_REPORT_FEATURE_Buf[1],a	
		EP0_RD_RAM_addr_set #0x2
		EP0_RD_RAM_to_A
		mov SET_REPORT_FEATURE_Buf[2],a	
		EP0_RD_RAM_addr_set #0x3
		EP0_RD_RAM_to_A
		mov SET_REPORT_FEATURE_Buf[3],a	
		EP0_RD_RAM_addr_set #0x4
		EP0_RD_RAM_to_A
		mov SET_REPORT_FEATURE_Buf[4],a	
		EP0_RD_RAM_addr_set #0x5
		EP0_RD_RAM_to_A
		mov SET_REPORT_FEATURE_Buf[5],a	
		EP0_RD_RAM_addr_set #0x6
		EP0_RD_RAM_to_A
		mov SET_REPORT_FEATURE_Buf[6],a		
		EP0_RD_RAM_addr_set #0x7
		EP0_RD_RAM_to_A
		mov SET_REPORT_FEATURE_Buf[7],a	
		b0bclr	set_report_feature_flag
		b0bset	set_report_feature_arrival
		;b0bset	set_report_feature_done

_EP0_OUT_STATUS_Stage:
		b0bset	UE0R.5			;ACK OUT status stage				
		jmp	isr_90

// ====================================================================== //
//  		2. Divide the data and Send to the FIFO			  //
// ====================================================================== //

/***************************************************************************
* NAME:  decm_length
*----------------------------------------------------------------------------
* PURPOSE: 
* 	subtract table_length[0] table_length[1]
*	to solve problems about occur borrow
*----------------------------------------------------------------------------
*****************************************************************************/
decm_length:
		mov	a,table_length[0]	;length[0] - 1
		sub	a,#1h			; hubert
		mov	table_length[0],a
		b0bts0	FC
		jmp	$+4
		mov	a,table_length[1]	;if occur borrow then length[1] - 1 
		sub	a,#1h
		mov	table_length[1],a
		b0bts1	FC
		clr	table_length[1]     ;;if occur borrow then length[1] = 0
		ret

/***************************************************************************
* NAME:  check_length
*----------------------------------------------------------------------------
* PURPOSE: 
* 	
*	if table length > wLength
*	then table length = wLength
*----------------------------------------------------------------------------
*****************************************************************************/	
check_length:
		mov	a,wLength_H		
		sub	a,table_length[1]
		b0bts0	FC
		jmp	check_length_20	;wLength_H >= table_length[1]
		jmp	check_length_30	;wLength_H < table_length[1]
check_length_20:
		mov	a,wLength_H
		cmprs	a,table_length[1]
		jmp	check_length_90	;wLength_H > table_length[1]

		mov	a,wLength_L		
		sub	a,table_length[0]
		b0bts0	FC
		jmp	check_length_90	;if wLength_L >= table_length[0]
check_length_30:		
		mov	a,wLength_H		;then table_length[0] = wLength_L
		mov	table_length[1],a
		mov	a,wLength_L		;then table_length[0] = wLength_L
		mov	table_length[0],a
check_length_90:
		ret

/***************************************************************************
* NAME:  table_transmit
*----------------------------------------------------------------------------
* PURPOSE: 
*   output data from lookup table to usb,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久9热精品视频| 欧美一级黄色片| 国产成人免费视频网站高清观看视频| 偷窥少妇高潮呻吟av久久免费| 亚洲免费av高清| 亚洲精品v日韩精品| 亚洲天堂久久久久久久| 亚洲欧美日韩系列| 亚洲激情图片小说视频| 亚洲综合图片区| 亚洲成va人在线观看| 香蕉av福利精品导航| 午夜成人免费视频| 久久精品国产精品亚洲红杏| 蜜臀av一区二区在线免费观看| 免费欧美高清视频| 狠狠色丁香婷婷综合久久片| 国产一区 二区| 国产大陆a不卡| 丰满放荡岳乱妇91ww| jizzjizzjizz欧美| 色综合网站在线| 欧美日韩综合一区| 91精品国产91久久综合桃花| 日韩免费成人网| 久久久久久久综合色一本| 欧美激情一区二区三区不卡 | 国产精品乱码人人做人人爱 | 国产成人精品免费看| 岛国精品在线播放| 91麻豆视频网站| 91精品久久久久久久久99蜜臂| 日韩一级在线观看| 中文字幕欧美日韩一区| 亚洲人成网站色在线观看| 五月天国产精品| 国产一区二区免费在线| 91麻豆免费在线观看| 欧美美女一区二区| 久久久精品黄色| 一区二区三区中文字幕在线观看| 天涯成人国产亚洲精品一区av| 老色鬼精品视频在线观看播放| 国产成人精品影院| 欧美日韩一区二区在线观看| 精品美女一区二区| 亚洲欧洲国产专区| 日韩精品电影在线| 成人免费观看av| 欧美日韩中文国产| 国产日韩v精品一区二区| 亚洲影院久久精品| 国内偷窥港台综合视频在线播放| 91视频www| 欧美大尺度电影在线| 亚洲美腿欧美偷拍| 国产一区二区在线观看免费| 一本色道a无线码一区v| 欧美v亚洲v综合ⅴ国产v| 日韩理论片在线| 另类小说综合欧美亚洲| 在线观看视频欧美| 国产日韩三级在线| 日韩激情一二三区| 一本色道久久综合亚洲精品按摩| 精品捆绑美女sm三区| 亚洲一区二区成人在线观看| 国产91精品久久久久久久网曝门| 在线观看亚洲一区| 国产精品传媒入口麻豆| 久久91精品国产91久久小草 | 国产精品私人自拍| 免费精品视频在线| 欧美日韩一区二区三区视频| 中文字幕第一区二区| 美女一区二区在线观看| 91黄视频在线| 成人欧美一区二区三区视频网页| 久久99日本精品| 在线看国产一区| 中文字幕中文乱码欧美一区二区| 精品系列免费在线观看| 在线播放日韩导航| 亚洲成人一区二区| 色综合久久久久| 国产精品女主播av| 国产精品综合久久| 精品噜噜噜噜久久久久久久久试看 | 色诱视频网站一区| 欧美激情综合五月色丁香| 免费成人美女在线观看.| 欧美色涩在线第一页| 亚洲综合一区二区三区| 日本精品视频一区二区| 亚洲久本草在线中文字幕| 成人午夜激情在线| 日本一区二区动态图| 国产精品一区二区果冻传媒| 欧美电影免费观看高清完整版在线| 午夜精品久久久久影视| 欧美三级电影在线看| 亚洲bt欧美bt精品777| 欧美性色欧美a在线播放| 夜夜精品浪潮av一区二区三区| 91一区二区在线观看| 中文字幕日韩一区| av亚洲产国偷v产偷v自拍| 国产精品灌醉下药二区| 色综合一区二区| 一区二区三区四区不卡在线| 欧美午夜精品一区| 午夜影院在线观看欧美| 欧美中文一区二区三区| 亚洲电影一级片| 欧美人与z0zoxxxx视频| 蜜桃视频在线观看一区| 欧美不卡123| 国产一区二区三区最好精华液| 国产日产精品1区| youjizz久久| 一区二区免费在线播放| 欧美日韩精品欧美日韩精品一综合 | 日韩av一区二区三区| 91精品国产综合久久福利| 青青青伊人色综合久久| 久久精品夜色噜噜亚洲a∨| 成人黄色免费短视频| 亚洲精品第1页| 91精品国产色综合久久久蜜香臀| 久久国产精品99久久人人澡| 国产亚洲自拍一区| 91丝袜美女网| 午夜精品免费在线| 久久久av毛片精品| 99久久久免费精品国产一区二区| 一区二区三区**美女毛片| 在线电影一区二区三区| 国产精品一区二区久激情瑜伽| 成人欧美一区二区三区黑人麻豆 | 在线欧美一区二区| 久久国产综合精品| 国产精品成人在线观看 | 亚洲一二三四在线| 久久亚洲精品小早川怜子| 成人动漫在线一区| 亚洲成人一区在线| 久久―日本道色综合久久| 94-欧美-setu| 青娱乐精品在线视频| 亚洲国产精品av| 欧美日韩国产三级| 国产成人精品三级| 亚洲动漫第一页| 久久久精品综合| 91极品美女在线| 国产乱人伦偷精品视频免下载| 亚洲欧洲综合另类在线| 精品国产3级a| 色哟哟一区二区三区| 九九精品视频在线看| 亚洲精品乱码久久久久久日本蜜臀| 日韩精品影音先锋| 欧美亚洲高清一区二区三区不卡| 国产一区二区三区视频在线播放| 亚洲高清免费观看高清完整版在线观看| 久久日韩精品一区二区五区| 欧美自拍偷拍午夜视频| 国产成人欧美日韩在线电影| 亚洲444eee在线观看| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 亚洲一二三四在线观看| 国产午夜一区二区三区| 欧美日韩国产首页| 99精品视频在线观看| 韩国女主播成人在线| 婷婷成人激情在线网| 亚洲精品中文在线影院| 久久久久久99精品| 日韩欧美国产精品| 欧美日韩一区二区三区免费看| 99久久精品免费| 国产一区二区三区精品欧美日韩一区二区三区| 亚洲一级电影视频| 亚洲欧美精品午睡沙发| 欧美激情一区二区三区全黄| 精品国产伦一区二区三区免费| 欧美日本一区二区| 在线免费不卡视频| 91亚洲大成网污www| 成人一区二区三区在线观看| 精品一二三四区| 美女视频第一区二区三区免费观看网站| 一区二区三区在线视频观看58| 国产欧美日韩精品a在线观看| 久久香蕉国产线看观看99| 精品国产乱码久久| 日韩精品自拍偷拍| 欧美成人vr18sexvr| 欧美电影免费观看高清完整版在线观看 | 久久久久久黄色|