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

📄 usb_isr.asm

📁 本次设计的RS232 to USB转换器
💻 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_ProcessOutDataPacket              
;;--------------------------------------------------------------------
L_StatusStage:                                          
		CLR        R1.@Packet0 
		SNZ        R1.@SetupToken    			    
        JMP        L_Exit_ISRUSB0                       
;;--------------------------------------------------------------------
L_CheckSetupStage:
		SNZ        R1.@SetupToken
		JMP        L_Exit_ISRUSB0
L_SetupStage:
		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_ReportSize                
		SNZ        Z
		JMP        L_StallPipe0
		CALL       SBR_USBToCOM
		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_SendData                            
		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_ISRUSB
;;--------------------------------------------------------------------
L_Exit_ISRUSB0:
		CLR       USR.0
		JMP       L_Exit_ISRUSB
;;********************************************************************
;;**************************input data to host************************
;;********************************************************************
L_AccessFIFO1:
;mov   a,02H                                          ;;test code(test interrupt interval time)
;xorm  a,pa                                           ;;
		SZ		  R_ReportIndex
		JMP       L_ExitISRUSB1
		
		CALL      SBR_FIFO1_WR_Check
		SNZ       Z
		JMP       L_ExitISRUSB1
		
		MOV       A,R_ReBufferAddress
		XOR       A,R_TrBufferAddress
		SZ        Z
		JMP       L_ExitISRUSB1
L_COMToUSBInterruptIn:
		CALL      SBR_ClearFIFOBAK

		CLR       F_DataUpdate
		CLR       R_InputReportDataSize
		MOV       A,R_TrBufferAddress
		MOV       MP0,A

		MOV       A,R0
		MOV       R_FIFOBAK1,A
		INC       R_InputReportDataSize
		CALL      SBR_AddBufferAddress
		XOR       A,R_ReBufferAddress
		SZ        Z
		JMP       L_SendFIFOInterruptIn

		MOV       A,R0
		MOV       R_FIFOBAK2,A
		INC       R_InputReportDataSize
		CALL      SBR_AddBufferAddress
		XOR       A,R_ReBufferAddress
		SZ        Z
		JMP       L_SendFIFOInterruptIn

		MOV       A,R0
		MOV       R_FIFOBAK3,A
		INC       R_InputReportDataSize
		CALL      SBR_AddBufferAddress
		XOR       A,R_ReBufferAddress
		SZ        Z
		JMP       L_SendFIFOInterruptIn

		MOV       A,R0
		MOV       R_FIFOBAK4,A
		INC       R_InputReportDataSize
		CALL      SBR_AddBufferAddress
		XOR       A,R_ReBufferAddress
		SZ        Z
		JMP       L_SendFIFOInterruptIn

		MOV       A,R0
		MOV       R_FIFOBAK5,A
		INC       R_InputReportDataSize
		CALL      SBR_AddBufferAddress
		XOR       A,R_ReBufferAddress
		SZ        Z
		JMP       L_SendFIFOInterruptIn

		MOV       A,R0
		MOV       R_FIFOBAK6,A
		INC       R_InputReportDataSize
		CALL      SBR_AddBufferAddress
		XOR       A,R_ReBufferAddress
		SZ        Z
		JMP       L_SendFIFOInterruptIn

		MOV       A,R0
		MOV       R_FIFOBAK7,A
		INC       R_InputReportDataSize
		CALL      SBR_AddBufferAddress
		JMP       L_SendFIFOInterruptIn
;;--------------------------------------------------------------------
L_SendFIFOInterruptIn:
		MOV       A,R_InputReportDataSize
		MOV       R_FIFOBAK0,A

		MOV       A,0FEH
		ANDM      A,PA                             
		MOV       A,C_ReportSize                   
		MOV       R_DataPacketLength,A
		CALL      SBR_FIFO1_WR_Check
		CALL      SBR_WriteFIFO1
;;--------------------------------------------------------------------
L_ExitISRUSB1:
		CLR       F_AccessEP1
		JMP       L_Exit_ISRUSB
;;********************************************************************
L_Exit_ISRUSB:
		CLR       INTC.0
		SET       INTC.1
		M_POP
		RETI
;;********************************************************************  

⌨️ 快捷键说明

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