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

📄 std1.asm

📁 盛群USB单片机设计的键盘驱动程序提供下载,以及相关的驱动程序下载
💻 ASM
📖 第 1 页 / 共 2 页
字号:
include			ht82k96e.inc
include			usbrf.inc
include			usbfifo.inc

extern			baddr_state		:bit
extern			bFLAG_FIFO_REDY	:bit
extern			bRmtWakeup		:bit
extern			bFLAG_RsqF		:bit
extern			bFLAG_SndFC		:bit
extern			bFLAG_HvRpt		:bit
extern			brd_h_table		:bit
extern			bCfgValue 		:bit
extern			bwait_setup		:bit


extern			int_temp1		:byte
extern			int_temp2		:byte
fifo_temp		EQU		int_temp1
FIFO_ADDR		equ		int_temp1
ADDR_Wake		equ		fifo_addr.0
temp			equ		int_temp2
extern			STALL			:byte
;extern			Wtotallength		:near
;extern			bNumberInterface	:near
extern			des_count		:byte
extern			FIFO_Request	:byte
extern			FIFO_wValueH 	:byte
extern			FIFO_wValueL	:byte
extern			CMD_ADDR		:byte
extern			FIFO_wIndexH	:byte
extern			FIFO_Type		:byte
;extern			TEMP			:byte
extern			FIFO_wIndexL	:byte
extern			FIFO_OUT1		:byte
extern			fifo_out2		:byte
extern			ReturnAddr		:byte
extern			FIFO_SendLen	:byte
extern			TableLength		:byte
extern			FIFO_wLengthH	:byte
extern			FIFO_wLengthL	:byte

;extern			AltkbSetting	:byte
;extern			altmousesetting	:byte
extern			lengthh			:byte
extern			lengthl			:byte
extern			FIFO_TBLP		:byte


Extern			ExitExt:near
EXTERN			ToStallPipe0:NEAR
EXTERN			RequestResponse:NEAR
EXTERN			SendHandshake:NEAR
EXTERN			GetPipeBit:NEAR
EXTERN			SendFIFOOut:NEAR
EXTERN			ClearStall:NEAR
EXTERN			SetStall:NEAR

EXTERN			DeviceD:NEAR
EXTERN			ConfigurationD:NEAR
EXTERN			InterfaceD_0:NEAR
EXTERN			EndpointD_0:NEAR
EXTERN			HID_0:NEAR
EXTERN			Entity_0:NEAR
EXTERN			InterfaceD_1:NEAR
EXTERN			EndpointD_1:NEAR
EXTERN			HID_1:NEAR
EXTERN			Entity_1:NEAR
;EXTERN			InterfaceD_2:NEAR
;EXTERN			EndpointD_2:NEAR
;EXTERN			HID_2:NEAR
;EXTERN			Entity_2:NEAR

extern			LangID:near
extern			ManufactureS:near
extern			ProductS:near



STD1			.SECTION			AT 00DH		'code'  
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
get_Interface_des_adr:
				mov		a,des_count
get_interface_pcl_3:
				addm	a,pcl
				ret		a,LOW InterfaceD_0
				ret		a,LOW InterfaceD_1
;-----------------------------------------------------------------------------------
get_HID_des_adr:
				mov		a,des_count
get_HID_pcl_3:
				addm	a,pcl
				ret		a,LOW HID_0
				ret		a,LOW HID_1
;-----------------------------------------------------------------------------------
get_endpt_des_adr:
				mov		a,des_count
get_endpt_pcl_3:
				addm	a,pcl
				ret		a,LOW EndpointD_0
				ret		a,LOW EndpointD_1
;-----------------------------------------------------------------------------------

get_entity_des_adr:
				mov		a,des_count
get_entity_pcl_3:
				addm	a,pcl
				ret		a,LOW Entity_0
				ret		a,LOW Entity_1
;-----------------------------------------------------------------------------------
get_entity_length:
				mov		a,des_count
get_entity_len_pcl_3:
				addm	a,pcl
				ret		a,Entity_Length_0
				ret		a,Entity_Length_1
;-----------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------
;no implement STD command
GetInterface:
                JMP		ToStallPipe0            ;No:Error
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SetInterface:
				jmp		TOstallpipe0
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SynchFrame:     ;No support
                JMP		ToStallPipe0
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;-----------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------


;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
GetConfiguration:
                ;Check bmRequestType direction
                SNZ     FIFO_Type.@Setup_D    	;device to host ?
                JMP		ToStallPipe0            ;No:Error

				clr		FIFO_out1
				sz		bcfgvalue
                set     FIFO_OUT1.0           	;to FIFO
                MOV     A,01H                   ;Send length = 1
				jmp		SendFIFOOut
;                MOV     FIFO_SendLen,A        	;
;                jmp	    RequestResponse

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;----- Standard request -----------------------------------------------------
StandardRequest:
				mov		a,1
				snz		baddr_state
				mov		a,ENDPOINT_NO
				mov		fifo_temp,a

                MOV     A,FIFO_Request    		;bRequest
                SUB     A,STANDARD_REQUEST_NO   ;Over 13 Item ?
                SZ      C                   	;
                JMP		ToStallPipe0        	;Yes
                MOV     A,FIFO_Request
;!!!!! Need in same page
std_request_pcl_14:
                ADDM    A,PCL
                JMP     GetStatus           ;0
                JMP     ClearFeature        ;1
                JMP		ToStallPipe0        ;2
                JMP     SetFeature          ;3
                JMP		ToStallPipe0        ;4
                JMP     SetAddressC         ;5
                JMP     GetDescriptor       ;6
                JMP     Tostallpipe0	    ;7
                JMP     GetConfiguration    ;8
                JMP     SetConfiguration    ;9
                JMP     GetInterface        ;A
                JMP     SetInterface        ;B
                JMP     SynchFrame          ;C

;////////////////////////////////////////////////////////////////////////////
;Standard Request
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SetAddressC:
                SZ      FIFO_wValueH          	;Is wValueH == 0 ?
                JMP		ToStallPipe0            ;No:Error

                MOV     A,FIFO_wValueL        	;Save address to CMD_ADDR
                MOV     CMD_ADDR,A            	;
                SET     bFLAG_FIFO_REDY			;Wait to write address
                JMP     SendHandshake
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ClearFeature:
                SZ      FIFO_wValueH          	;wValueH == 0 ?
                JMP		ToStallPipe0            ;No

                SZ      FIFO_wIndexH          	;wIndexH == 0 ?
                JMP		ToStallPipe0            ;No

                MOV     A,FIFO_Type           	;Type (Device, Interface or
                AND     A,Setup_Rev             ;   Endpoint)
                MOV     TEMP,A
;!!!!! Need in same page
                SUB     A,04H                   ;Over 4 item ?
                SZ      C                       ;
                JMP		ToStallPipe0            ;Yes
                MOV     A,TEMP
clear_feature_pcl_5:
                ADDM    A,PCL
                JMP     DeviceStatusCF
                JMP     TOstallpipe0
                JMP     EndpointStatusCF
                JMP		ToStallPipe0
;-----------------------------------------------------------------------------------

EndpointStatusCF:                               ;clear stall flag
;Check Feature Selector
                SZ     	FIFO_wValueL          	;ENDPOINT_STALL = 0 ?
				JMP		ToStallPipe0            ;No

;Check	Endpoint Number
;				snz		fifo_windexL.7
;				jmp		ToStallpipe0
                MOV     A,FIFO_wIndexL        	;Get endpoint number
				and		a,01111111b
				SUB		A,FIFO_temp
				SZ		C
				JMP		ToStallPipe0

				MOV		A,FIFO_wIndexL
    ;Is it necessary to check endpoint number range ?
                AND     A,0FH                   ;Ignore direction
				call	GetPipeBit
                CALL    ClearStall              ;Clear endpoint stall
    ;Is it necessary to check clear completely ?
                JMP     SendHandshake           ;send handshake flag
;-----------------------------------------------------------------------------------

DeviceStatusCF:
;Check Feature Selector
                MOV     A,FIFO_wValueL        	;DEVICE_REMOTE_WAKEUP = 1 ?
                XOR     A,01H                   ;
                SNZ     Z                       ;
                JMP		ToStallPipe0            ;No

                SZ      FIFO_wIndexL          	;Is wIndex == 0 ?
                JMP		ToStallPipe0            ;No
	;disable remote wakeup          			;Yes
                CLR     bRmtWakeup   			;disable remote wakeup (flag)
				rla		cmd_addr
				and		a,11111110b
				mov		fifo_addr,a
                CLR     ADDR_Wake  				;Clear remote wakeup flag

                JMP     SetAddrWake       		;send handshake flag
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
GetStatus:
                ;Check bmRequestType direction
                SNZ     FIFO_Type.@Setup_D    	;Device to Host ?
                JMP		ToStallPipe0            ;No: Error

				SZ      FIFO_wIndexH      		;Is wIndex == 0 ?
                JMP		ToStallPipe0        	;No
               

                MOV     A,FIFO_Type           	;Type (Device, Interface or
                AND     A,Setup_Rev             ;   Endpoint)
                MOV     TEMP,A
;!!!!! Need in same page
                SUB     A,04H                   ;Over 4 item ?
                SZ      C                       ;
                JMP		ToStallPipe0            ;Yes
                MOV     A,TEMP
get_status_pcl_5:
                ADDM    A,PCL
                JMP     DeviceStatusS
                JMP     InterfaceStatusS
                JMP     EndpointStatusS
                JMP		ToStallPipe0
;-----------------------------------------------------------------------------------
EndpointStatusS:
                MOV		A,FIFO_wIndexL
				and		a,01111111b
				SUB		A,fifo_temp
				SZ		C
				JMP		ToStallPiPe0	
    ;Don't care direction, maybe it's neccesary.
                MOV     A,0FH               	;Ignore direction (D7)
                AND	    A,FIFO_wIndexL    		;get stall pipe number
                CALL    GetPipeBit          	;and transform to bitmap
                MOV     FIFO_TEMP,A
                MOV     A,STALL           		;get stall status into ACC
ShiftLoop:
                RRC     FIFO_TEMP         		;Shift stall bit to D0
                SZ      C                   	;
                JMP     FoundStall          	;
                RR      ACC                 	;
                JMP     ShiftLoop           	;
FoundStall:
                AND     A,01H               	;mask bits except stall bit
                JMP     SendEndpointStsS    	;Send endpoint status
;-----------------------------------------------------------------------------------
DeviceStatusS:
                SZ      FIFO_wIndexL      		;Is wIndex == 0 ?
                JMP		ToStallPipe0        	;No

				clr		acc
				sz		bRmtwakeup
				set		acc.1	
SendEndpointStsS:
                MOV     FIFO_OUT1,A       		;low byte
                CLR     FIFO_OUT2         		;high byte = 00H
                MOV     A,02H             		;data length = 2
                JMP     SendFIFOOut       		;Send it
;-----------------------------------------------------------------------------------
InterfaceStatusS:
				sz		baddr_state
				jmp		TOstallpipe0
                MOV		A,FIFO_wIndexL
				SUB     A,INTERFACE_NO         	;Over 2 Interface ?
                SZ      C                   	;
                JMP		ToStallPipe0        	;Yes

;No Matter which Interface
                CLR     FIFO_OUT1         		;low byte = 00H
                CLR     FIFO_OUT2         		;high byte = 00H
                MOV     A,02H               	;data length = 2
                JMP     SendFIFOOut         	;Send it
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Get string descriptor
GetStringDes:

                SZ      FIFO_wIndexH
                JMP		get_other_string
        		;FIFO_wIndexL = Language ID
				sz		fifo_windexl
				jmp		get_other_string
				sz		fifo_wvaluel
				jmp		tostallpipe0

get_string:		
				mov		a,fifo_wvaluel
				sub		a,3
				sz		c
				jmp		Tostallpipe0

				mov		a,low LangID					;00
				sz		fifo_wvaluel.0
				mov		a,low ManufactureS				;01
				sz		fifo_wvaluel.1
				mov		a,low ProductS					;10

                MOV     TBLP,A                  ;
                JMP     ReadTableAndSendcnf        ;Read Device table and send it

get_other_string:
				mov		a,fifo_windexH
				xor		a,LAND_ID_H
				snz		z
				jmp		ToStallPipe0

				mov		a,fifo_windexl
				xor		a,LAND_ID_L
				snz		z
				jmp		TOStallpipe0
				jmp		get_string

;Standard--------------------------------------------------------------------
;Get device descriptor
std_des_start_pcl:
GetDeviceDes:
                SZ      FIFO_wIndexH
                JMP		ToStallPipe0
                SZ      FIFO_wIndexL
                JMP		ToStallPipe0

                MOV     A,LOW DeviceD           ;Set table pointer to device
                MOV     TBLP,A                  ;  table
                JMP     ReadTableAndSendcnf     ;Read Device table and send it
;----------------------------------------------------------------------------------------------

;(Configuration, interface & endpoint) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
GetConfigurationDes:
                ;Configuration
                SZ      FIFO_wIndexH
                JMP		ToStallPipe0
                SZ      FIFO_wIndexL          	;report ID 0 ?
                JMP		ToStallPipe0            ;


                MOV     A,LOW ConfigurationD    ;Set table pointer to
                MOV     TBLP,A                  ;configuration
                MOV     A,LOW GetInterfaceDes 	;Save Return Address
                MOV     ReturnAddr,A            ;to ReturnAddr
                JMP     ReadTableAndSendCnf     ;Read configuration table
                                                ;and send it
;----------------------------------------------------------------------------------------------

GetInterfaceDes:
                ;Interface
				call	get_Interface_des_adr
				MOV     TBLP,A                  ;configuration

⌨️ 快捷键说明

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