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

📄 usb_int2.asm

📁 合泰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




;**************************************************************************
;*			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	



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

				clr		intc.1
				set		intc.0

				clr		FIFO_w_c_b				;use in Bread Board only
;-----------------------------------------------------------------------------------
				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		;seup

;--------------------------------------------------------------------------------------	
;                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                	;
;
;				sz		CMD_ADDR
;				set		baddr_state			
;                CLR     bFLAG_AdrF  				;have finished address write
                JMP     ExitExt0

;--------------------------------------------------------------------------------------	
AccessFIFO0_cont:
;examine FIFO0 IN, SETUP, OUT Intterupt

⌨️ 快捷键说明

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