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

📄 usb_int2.asm

📁 基于HT82K96E的usb鼠标实现源程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:

include		ht82k96e.inc
;include 	usbrf.inc
include		usbFIFO.inc



;"FIFO_type"
@Setup_D    EQU     7               	;direction
@INTERFACE	EQU		0
Setup_Type  EQU     60H             	;Type
Setup_Rev   EQU     1FH             	;Recipient  (Just use 2 bits)
wValueH_Typ EQU     60H     			;D6..5  Type: 0-Standard, 1-Class, 2-Vendor
wValueH_Dst EQU     1FH     			;



extern		bFLAG_SndFC		:bit			;has control pipe data to transmitter
extern		bFLAG_Setup		:bit
extern		bFLAG_FIFO_REDY		:bit
extern		bFLAG_RsqF		:bit
extern		bFLAG_AdrF		:bit
extern		bRmtWakeup		:bit 
extern		bhas_data_out_previous	:bit
extern		bhas_data_out_previous1	:bit
extern		bhas_data_out_previous2	:bit


extern		bsetup_flag		:bit			;there are setup cmd received	
extern		bCMD_INDEX		:bit
extern		baddr_state		:bit
extern		bKB_KeyUpt		:bit
extern		btime_out_KB	:bit
;extern		bacpi_key_chg	:bit
;extern		bmulti_key_chg	:bit
extern		breseume_s		:bit
extern		bwait_setup		:bit




extern		fifo_out1				:byte
extern		fifo_out2				:byte
extern		fifo_out3				:byte
extern		fifo_out4				:byte
extern		fifo_out5				:byte
extern		fifo_out6				:byte
extern		fifo_out7				:byte
extern		fifo_out8				:byte

extern		FIFO0_Wr_Check			:near
extern		FIFO0_Rd_Check			:near
extern		FIFO1_Rd_Check			:near
extern		FIFO2_Rd_Check			:near
extern		LEN0_Rd_Check			:near
extern		LEN0_Wr_Check			:near
extern		ReadLen0				:near
extern		WriteLen0				:near
extern		ReadFIFO0				:near
extern		ReadFIFO1				:near
extern		ReadFIFO2				:near
extern		WriteFIFO0				:near
extern		FIFO1_Wr_Check 			:near
extern		WriteFIFO1				:near
extern		FIFO2_Wr_Check			:near
extern		WriteFIFO2				:near
;extern		moveacpidata			:near
;extern		movemultidata			:near





extern		GetPipeBit				:near
extern		clearstall				:near
extern		setstall				:near


extern		GetEnd						:near
extern		StandardRequest				:near
extern		ClassRequest				:near
extern		ReadNextCnf					:near

extern		SetLED						:near
extern		MoveKeyboardData			:near

extern		ReturnAddr					:byte
extern		FIFO_SendLen				:byte
extern		FIFO_Type					:byte
extern		KB_LED						:byte
extern		TempKBTime					:byte
extern		TempKBTime_L				:byte
extern		CMD_ADDR					:byte
extern		int_temp1					:byte


FIFO_addr		equ			int_temp1


usbint_var		.section		'data'
isr_usb_acc			db			?
isr_usb_status		db			?
isr_usb_mp1			db			?
isr_usb_mp0			db			?
isr_usb_tblp		db			?
int_reg_temp		db			?				;for store USB pipe int register

int_NO				db			?
wr_NO				db			?
setrpt_NO			db			?
kywr_NO				db			?


;**************************************************************************
;*			External INT subroutine
;**************************************************************************

usbExt			.Section	 AT 350H 'code'
;External interrupt service routine
EXT_START:


				clr		wdt	
				MOV     ISR_USB_ACC,A          	;Save ACC
                MOV     A,STATUS               	;Save STATUS
                MOV     isr_usb_status,A        

                MOV     A,USB_REG_BANK      	;Set bank pointer to USB control
                MOV     BP,A                	;register bank	

				inc		int_NO					;insert for count int number
				mov		a, int_NO
				sub		a, 08h
				sz		acc
				jmp		$+2
				nop

				

				MOV		A,MP1					;Save mp1,r1,mp0,r0 before 
				MOV		isr_usb_mp1,A
				mov		a,mp0
				mov		isr_USB_mp0,a
				mov		a,tblp
				mov		isr_usb_tblp,a

				clr		intc.1					;usb int is disable
				set		intc.0					;master int is enable

				clr		FIFO_w_c_b				;use in Bread Board only,read FIFO
;-----------------------------------------------------------------------------------
				snz		suspend_line
				jmp		check_Access_FIFO

				mov		a,11110000b				;clear Int_reg within suspend state
				andm	a,Int_reg

				sz		resume_line
				jmp		turn_on_usb
;turn_off_usb:
;				clr		on_usb_clk			 	;turn on USB CLK	
;				set		regulator_off
				jmp		Exit_of_Ext_start
turn_on_usb:
				set		breseume_s
				set		on_usb_clk				;turn on USB CLK	
				clr		regulator_off
;-----------------------------------------------------------------------------------
;ExitExt:
Exit_of_Ext_start:



				mov		a,isr_usb_tblp
				mov		tblp,a
				mov		a,isr_usb_mp0
				mov		mp0,a
				MOV		A,isr_usb_mp1
				MOV		MP1,A	

                MOV     A,0				      	;Set bank pointer to UC
                MOV     BP,A                	;register bank	

                MOV     A,Isr_usb_status        ;Restore STATUS
                MOV     STATUS,A               	;
                MOV     A,isr_usb_acc          	;Restore ACC
				clr		intc.0
				set		intc.1



                RETI   
;-----------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------
check_Access_FIFO:
				clr		breseume_s
				set		on_usb_clk				;turn on USB CLK	
				clr		regulator_off

				sz		Int_reg.@int0			
				jmp		AccessFIFO0

;other pipe except pipe0 interrupt
				mov		a,Int_reg
				sz		Int_reg_temp
				jmp		examine_int123
				and		a,00001110b
				mov		Int_reg_temp,a
examine_int123:	
				sz		Int_reg_temp.@int1				
				jmp		AccessFIFO1
				sz		Int_reg_temp.@int2
				jmp		AccessFIFO2
				sz		Int_reg_temp.@int3
				jmp		AccessFIFO3		
				jmp		Exit_of_Ext_start
;-----------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------
Check_Pipe0:				
AccessFIFO0:
				set		chk_usb_reset_event		;?set usb mode flag
				clr		Int_reg.@int0			;clr pipe0 int flag	

                MOV     A,USB_MISC          	;MP1 point to Misc. register
                MOV     MP1,A               	;


;------------------------------------------------------------------------------------
				sz		bwait_setup
				jmp		wait_next_setup

				snz		r1.@usb_len0
				jmp		AccessFIFO0_cont		;out, in
;------------------------------------------------------------------------------------
wait_next_setup:
                MOV     A,USB_MISC          	;MP1 point to Misc. register
                MOV     MP1,A               	;
				nop
				nop
				sz		r1.@USB_Setup
				jmp		AccessFIFO0_cont		;setup

;--------------------------------------------------------------------------------------	
                SNZ     bFLAG_AdrF				;Need to write address
                JMP     ExitExt0

                CALL    FIFO0_Wr_Check       	;FIFO0 ready ?
				clr		r1.@USB_Req 
                SZ      Z                   	;
				JMP		ExitExt0

;set address
				rla		CMD_ADDR
                AND     A,0FEH              	;& save it
                MOV     FIFO_ADDR,A       		;Move address to adress buffer
                SZ      bRmtWakeup 				;Remote wakeup exist ?
                SET     FIFO_addr.0				;Yes:Set remote wakeup flag
                MOV     A,USB_ADDR_WAKE     	;MP1 point to Address register
                MOV     MP1,A               	;
                MOV     A,FIFO_ADDR        		;Write to Address Register
                MOV     R1,A                	;

⌨️ 快捷键说明

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