📄 usb_isr.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 + -