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

📄 usb_isr.asm

📁 holtech bar code reader 汇编程序
💻 ASM
字号:

;;Established date:                  2005/09/01
;;********************************************************************
ISR_USB:     
		M_PUSH
		CLR        INTC.1
		SET        INTC.0                               
		MOV        A,C_USBRegisterBank
		MOV        BP,A
;;--------------------------------------------------------------------
		SNZ        F_Suspend                            
		JMP        L_CheckAccessFIFO                       
		MOV        A,11111100B                          
		ANDM       A,USR
;;--------------------------------------------------------------------
		SZ         F_Resume                                    
		JMP        L_TurnOnUSB                          
		JMP        L_Exit_ISRUSB                        
L_TurnOnUSB:
		SET        F_USBClockOn                         ;;
		JMP        L_Exit_ISRUSB
;;--------------------------------------------------------------------
L_CheckAccessFIFO:
		SET        F_USBClockOn
		CLR        F_Suspend2

		SZ         F_AccessEP0
		JMP        L_AccessFIFO0
		SZ         F_AccessEP1
		JMP        L_AccessFIFO1
		JMP        L_Exit_ISRUSB
;;--------------------------------------------------------------------
L_AccessFIFO0:
		SET        F_USBReset
		CLR        F_AccessEP0
		MOV        A,C_MISC
		MOV        MP1,A
                                                       
		SNZ        F_ControlEvent                      
		JMP        L_CheckSetupStage                    
		                                               
		SNZ        R1.@Packet0                                                    
		jmp        L_SetupStage           
;;--------------------------------------------------------------------
L_StatusStage:                                          
		CLR        R1.@Packet0 
		SNZ        R1.@SetupToken    			    
        JMP        L_Exit_ISRUSB0                       
;;--------------------------------------------------------------------
L_CheckSetupStage:
		SNZ        R1.@SetupToken
		JMP        L_Exit_ISRUSB0
L_SetupStage:
		snz        R1.@SetupToken
		jmp        L_ProcessOutDataPacket
		CLR        R1.@SetupToken
		CLR        R1.@Packet0
		SET        F_ControlEvent
		SET        F_SetupData
		JMP        L_Exit_ISRUSB0
;;-------------------------------------------------------------------- 
L_ProcessOutDataPacket:                                           
;		SZ         R1.@SetupToken
;		JMP        L_SetupStage
		CALL       SBR_FIFO0_RD_Check
		CLR        R1.@USB_REQ
		SNZ        Z
		JMP        L_SendFIFO0
;       JMP        L_ReadFIFO0
;;--------------------------------------------------------------------
L_ReadFIFO0:
		SZ         F_SetupData
		JMP        L_GetSetupStage_Data
		CALL       SBR_FIFO0_RD_Check
		CALL       SBR_ReadFIFO0

		MOV        A,R_ReportIndex
		ADDM       A,PCL
		JMP        L_Exit_ISRUSB
		JMP        L_SetFeature
;		JMP        L_SetOutput
;;--------------------------------------------------------------------
;;--------------------ouput data from host to device------------------
;;--------------------------------------------------------------------
L_SetOutput:
		MOV        A,R_DataPacketLength
		XOR        A,C_OutReportSize                
		SNZ        Z
		JMP        L_StallPipe0
		CALL       SBR_USBToMCU
		CLR        R_ReportIndex
		JMP        L_WriteDataToFIFO_0_Packet
;;--------------------------------------------------------------------
L_SetFeature:
		CLR        R_ReportIndex
		JMP        L_StallPipe0
;;--------------------------------------------------------------------
L_GetSetupStage_Data:
		CLR       F_SetupData                          
		CALL      SBR_FIFO0_RD_Check
		CALL      SBR_ReadFIFO0                        
		MOV       A,C_Stall
		MOV       MP1,A    
		CLR       R_Stall.0                            
		MOV       A,R_Stall                            
		MOV       R1,A      

		CLR       F_SendContinue                            
		CLR       R_ReportIndex
                        
		MOV       A,C_FIFOSize
		XOR       A,R_DataPacketLength
		SNZ       Z
		JMP       L_StallPipe0
		
		MOV       A,C_RequestType
		AND       A,T_RequestType
		SWAP      ACC
		RR        ACC
		ADDM      A,PCL
		JMP       L_StandardRequest
		JMP       L_ClassRequest
		JMP       L_StallPipe0
;;--------------------------------------------------------------------
L_SendFIFO0:
		SZ        F_SetupData
		JMP       L_Exit_ISRUSB0
		CALL      SBR_FIFO0_WR_Check
		CLR       R1.@USB_Req
		SNZ       Z                                    
		JMP       L_Exit_ISRUSB0
		
		SNZ       F_SendContinue
		JMP       L_Exit_ISRUSB0
		MOV       A,R_TBLPFIFO
		MOV       TBLP,A
		JMP       L_WriteDataToBuffer
;;--------------------------------------------------------------------
L_WriteDataToFIFO_AnyBytes:
		MOV       R_DataPacketLength,A
		CLR       F_ControlEvent
		JMP       L_WriteDataToFIFO
;;--------------------------------------------------------------------
L_WriteDataToFIFO:
		CLR       F_BufferFull
		CALL      SBR_FIFO0_WR_Check
		SZ        Z
		JMP       L_WriteDataToFIFOOK
		CLR       R1.@USB_Req
		SZ        R1.@Packet0
		JMP       L_Exit_ISRUSB0
		SZ        R1.@SetupToken
		JMP       L_Exit_ISRUSB0
		JMP       L_WriteDataToFIFO
L_WriteDataToFIFOOK:
		CALL      SBR_WriteFIFO0
		SET       F_DataUpdate                         
		JMP       L_Exit_ISRUSB0
;;--------------------------------------------------------------------
L_WriteDataToFIFO_0_Packet:
		CLR       F_BufferFull
		CALL      SBR_FIFO0_WR_Check
		SZ        Z
		JMP       L_Write0PacketToFIFO
		CLR       R1.@USB_Req
		SZ        R1.@Packet0
		JMP       L_Exit_ISRUSB0
		SZ        R1.@SetupToken
		JMP       L_Exit_ISRUSB0
		JMP       L_WriteDataToFIFO_0_Packet
L_Write0PacketToFIFO:
		CALL      SBR_Write_0_Packet
		CLR       F_ControlEvent
		JMP       L_Exit_ISRUSB0
;;--------------------------------------------------------------------
L_Stallpipe0:
		MOV       A,C_STALL
		MOV       MP1,A
		SET       R_STALL.0
		SET       R1.0
;		JMP       L_Exit_ISRUSB0
;;--------------------------------------------------------------------
L_Exit_ISRUSB0:
		CLR       USR.0
		JMP       L_Exit_ISRUSB
;;********************************************************************
;;**************************input data to host************************
;;********************************************************************
L_AccessFIFO1:
		SZ	  R_ReportIndex
		JMP       L_ExitISRUSB1
		
		CALL      SBR_FIFO1_WR_Check
		CLR       R1.@USB_Req
		SNZ       Z
		JMP       L_ExitISRUSB1
		
		SNZ        F_DataReady
		JMP       L_ExitISRUSB1
L_COMToUSBInterruptIn:
		CALL      SBR_ClearFIFOBAK
		CLR       F_DataUpdate
			
		SZ	  F_Fifo1Stage
		JMP	  L_FiFoStage2Int
		SET	  F_Fifo1Stage
		MOV	  A,08H
		MOV       R_DataPacketLength,A
		MOV	  R_InputReportDataSize,A
		
		MOV       A,OFFSET R_ReceiveBuffer
		MOV       MP0,A				
		JMP	  L_LocalJmp1
L_FiFoStage2Int:		
		CLR	  F_DataReady
		CLR	  F_Fifo1Stage
		MOV	  A,03H
		MOV       R_DataPacketLength,A		
		MOV	  R_InputReportDataSize,A		

		MOV       A,OFFSET R_ReceiveBuffer
		ADD	  A,08H
		MOV       MP0,A			
L_LocalJmp1:		
		CLR        BP  ;change to bank0
		
		MOV	  A,MP1
		MOV	  R_Tmp1,A  ;save mp1

		MOV       A,OFFSET R_FIFOBAK0
		MOV       MP1,A

		
L_LoopLoadDataToFifoBuffer:
		MOV       A,R0
		MOV       R1,A

		INC	  MP0
		INC	  MP1
		SDZ	  R_InputReportDataSize
		JMP       L_LoopLoadDataToFifoBuffer


L_SendFIFOInterruptIn:
                MOV	  A,R_Tmp1
                MOV	  MP1,A       ;restore MP1
		MOV       A,C_USBRegisterBank
		MOV       BP,A        ;restore bank1              
                      
;		MOV       A,C_InReportSize                   

		CALL      SBR_FIFO1_WR_Check
		CALL      SBR_WriteFIFO1
;;--------------------------------------------------------------------
L_ExitISRUSB1:
		CLR       F_AccessEP1
		JMP       L_Exit_ISRUSB
;;********************************************************************
L_Exit_ISRUSB:
		clr       BP
		CLR       INTC.0
		SET       INTC.1
		M_POP
		RETI
;;********************************************************************  

⌨️ 快捷键说明

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