📄 f34x_msd_usb_isr.src
字号:
MOV USB0ADR,#082H
?C0007:
MOV A,USB0ADR
JB ACC.7,?C0007
?C0008:
MOV DPTR,#bIn?041
MOV A,USB0DAT
MOVX @DPTR,A
?C0009:
; POLL_READ_BYTE(OUT1INT, bOut);
; SOURCE LINE # 75
MOV A,USB0ADR
JB ACC.7,?C0009
?C0010:
MOV USB0ADR,#084H
?C0011:
MOV A,USB0ADR
JB ACC.7,?C0011
?C0012:
MOV DPTR,#bOut?042
MOV A,USB0DAT
MOVX @DPTR,A
; {
; SOURCE LINE # 76
; if (bCommon & rbRSUINT) // Handle Resume interrupt
; SOURCE LINE # 77
MOV DPTR,#bCommon?040
MOVX A,@DPTR
JNB ACC.1,?C0013
; {
; SOURCE LINE # 78
; USB_Resume();
; SOURCE LINE # 79
LCALL USB_Resume
; }
; SOURCE LINE # 80
?C0013:
; if (bCommon & rbRSTINT) // Handle Reset interrupt
; SOURCE LINE # 81
MOV DPTR,#bCommon?040
MOVX A,@DPTR
JNB ACC.2,?C0014
; {
; SOURCE LINE # 82
; USB_Reset();
; SOURCE LINE # 83
LCALL USB_Reset
; }
; SOURCE LINE # 84
?C0014:
; if (bIn & rbEP0) // Handle Setup packet received
; SOURCE LINE # 85
MOV DPTR,#bIn?041
MOVX A,@DPTR
JNB ACC.0,?C0015
; { // or packet transmitted if Endpoint 0 is
; SOURCE LINE # 86
; Handle_Setup(); // transmit mode
; SOURCE LINE # 87
LCALL Handle_Setup
; }
; SOURCE LINE # 88
?C0015:
; if (bIn & rbIN1) // Handle In Packet sent, put new data on
; SOURCE LINE # 89
MOV DPTR,#bIn?041
MOVX A,@DPTR
JNB ACC.1,?C0016
; { // endpoint 1 fifo
; SOURCE LINE # 90
; In_count=0;
; SOURCE LINE # 91
MOV DPTR,#In_count
CLR A
MOVX @DPTR,A
; }
; SOURCE LINE # 92
?C0016:
; if (bOut & rbOUT2) // Handle Out packet received, take data off
; SOURCE LINE # 93
MOV DPTR,#bOut?042
MOVX A,@DPTR
JNB ACC.2,?C0017
; { // endpoint 2 fifo
; SOURCE LINE # 94
; Handle_Out2();
; SOURCE LINE # 95
LCALL Handle_Out2
; }
; SOURCE LINE # 96
?C0017:
; if (bCommon & rbSUSINT) // Handle Suspend interrupt
; SOURCE LINE # 97
MOV DPTR,#bCommon?040
MOVX A,@DPTR
JNB ACC.0,?C0019
; {
; SOURCE LINE # 98
; USB_Suspend();
; SOURCE LINE # 99
LCALL USB_Suspend
; }
; SOURCE LINE # 100
; }
; SOURCE LINE # 101
; }
; SOURCE LINE # 102
?C0019:
POP ACC
MOV R7,A
POP ACC
MOV R6,A
POP ACC
MOV R5,A
POP ACC
MOV R4,A
POP ACC
MOV R3,A
POP ACC
MOV R2,A
POP ACC
MOV R1,A
POP ACC
MOV R0,A
POP PSW
POP DPL
POP DPH
POP B
POP ACC
RETI
; END OF USB_ISR
;
; //----------------------------------------------------------------------------
; // USB_Resume
; //----------------------------------------------------------------------------
; //
; // Resume normal USB operation
; //
; // Parameters :
; // Return Value :
; //----------------------------------------------------------------------------
;
; void USB_Resume(void) // Add code to turn on anything turned off when
RSEG ?PR?USB_Resume?F34X_MSD_USB_ISR
USB_Resume:
; SOURCE LINE # 114
; { // entering suspend mode
; SOURCE LINE # 115
; volatile int k;
; k++;
; SOURCE LINE # 117
MOV DPTR,#k?143+01H
MOVX A,@DPTR
INC A
MOVX @DPTR,A
JNZ ?C0131
MOV DPTR,#k?143
MOVX A,@DPTR
INC A
MOVX @DPTR,A
?C0131:
; }
; SOURCE LINE # 118
RET
; END OF USB_Resume
;
;
; //----------------------------------------------------------------------------
; // USB_Reset
; //----------------------------------------------------------------------------
; //
; // - Set state to default
; // - Clear USB Inhibit bit
; //
; // Parameters :
; // Return Value :
; //----------------------------------------------------------------------------
;
; void USB_Reset(void)
RSEG ?PR?USB_Reset?F34X_MSD_USB_ISR
USB_Reset:
; SOURCE LINE # 132
; {
; SOURCE LINE # 133
; USB_State = DEV_DEFAULT; // Set device state to default
; SOURCE LINE # 134
MOV DPTR,#USB_State
MOV A,#02H
MOVX @DPTR,A
?C0021:
;
; POLL_WRITE_BYTE(POWER, 0x01); // Clear USB inhibit bit to enable USB
; SOURCE LINE # 136
MOV A,USB0ADR
JB ACC.7,?C0021
?C0022:
MOV USB0ADR,#01H
MOV USB0DAT,#01H
; // suspend detection
;
; Ep_Status[0] = EP_IDLE; // Set default Endpoint Status
; SOURCE LINE # 139
CLR A
MOV DPTR,#Ep_Status
MOVX @DPTR,A
; Ep_Status[1] = EP_HALT;
; SOURCE LINE # 140
INC DPTR
MOV A,#03H
MOVX @DPTR,A
; Ep_Status[2] = EP_HALT;
; SOURCE LINE # 141
INC DPTR
MOVX @DPTR,A
; }
; SOURCE LINE # 142
RET
; END OF USB_Reset
;
;
; //----------------------------------------------------------------------------
; // Handle_Setup
; //----------------------------------------------------------------------------
; //
; // - Decode Incoming Setup requests
; // - Load data packets on fifo while in transmit mode
; //
; // Parameters :
; // Return Value :
; //----------------------------------------------------------------------------
;
; void Handle_Setup(void)
RSEG ?PR?Handle_Setup?F34X_MSD_USB_ISR
Handle_Setup:
USING 0
; SOURCE LINE # 156
; {
; SOURCE LINE # 157
?C0024:
; BYTE control_reg,TempReg; // Temporary storage for EP control register
;
; POLL_WRITE_BYTE(INDEX, EP0_IDX); // Set Index to Endpoint Zero
; SOURCE LINE # 160
MOV A,USB0ADR
JB ACC.7,?C0024
?C0025:
MOV USB0ADR,#0EH
CLR A
MOV USB0DAT,A
?C0026:
; POLL_READ_BYTE(E0CSR, control_reg); // Read control register
; SOURCE LINE # 161
MOV A,USB0ADR
JB ACC.7,?C0026
?C0027:
MOV USB0ADR,#091H
?C0028:
MOV A,USB0ADR
JB ACC.7,?C0028
?C0029:
MOV DPTR,#control_reg?344
MOV A,USB0DAT
MOVX @DPTR,A
;
; if (Ep_Status[0] == EP_ADDRESS) // Handle Status Phase of Set Address command
; SOURCE LINE # 163
MOV DPTR,#Ep_Status
MOVX A,@DPTR
CJNE A,#05H,?C0030
; {
; SOURCE LINE # 164
?C0031:
; POLL_WRITE_BYTE(FADDR, Setup.wValue.c[LSB]);
; SOURCE LINE # 165
MOV A,USB0ADR
JB ACC.7,?C0031
?C0032:
CLR A
MOV USB0ADR,A
MOV DPTR,#Setup+03H
MOVX A,@DPTR
MOV USB0DAT,A
; Ep_Status[0] = EP_IDLE;
; SOURCE LINE # 166
CLR A
MOV DPTR,#Ep_Status
MOVX @DPTR,A
; }
; SOURCE LINE # 167
?C0030:
;
; if (control_reg & rbSTSTL) // If last packet was a sent stall, reset STSTL
; SOURCE LINE # 169
MOV DPTR,#control_reg?344
MOVX A,@DPTR
MOV R7,A
JNB ACC.2,?C0033
; { // bit and return EP0 to idle state
; SOURCE LINE # 170
?C0034:
; POLL_WRITE_BYTE(E0CSR, 0);
; SOURCE LINE # 171
MOV A,USB0ADR
JB ACC.7,?C0034
?C0035:
MOV USB0ADR,#011H
CLR A
MOV USB0DAT,A
; Ep_Status[0] = EP_IDLE;
; SOURCE LINE # 172
MOV DPTR,#Ep_Status
MOVX @DPTR,A
RET
; return;
; }
; SOURCE LINE # 174
?C0033:
;
; if (control_reg & rbSUEND) // If last setup transaction was ended prematurely
; SOURCE LINE # 176
MOV A,R7
JNB ACC.4,?C0037
; { // then set
; SOURCE LINE # 177
?C0038:
; POLL_WRITE_BYTE(E0CSR, rbDATAEND);
; SOURCE LINE # 178
MOV A,USB0ADR
JB ACC.7,?C0038
?C0039:
MOV USB0ADR,#011H
MOV USB0DAT,#08H
?C0040:
; POLL_WRITE_BYTE(E0CSR, rbSSUEND); // Serviced Setup End bit and return EP0
; SOURCE LINE # 179
MOV A,USB0ADR
JB ACC.7,?C0040
?C0041:
MOV USB0ADR,#011H
MOV USB0DAT,#080H
; Ep_Status[0] = EP_IDLE; // to idle state
; SOURCE LINE # 180
CLR A
MOV DPTR,#Ep_Status
MOVX @DPTR,A
; }
; SOURCE LINE # 181
?C0037:
;
; if (Ep_Status[0] == EP_IDLE) // If Endpoint 0 is in idle mode
; SOURCE LINE # 183
MOV DPTR,#Ep_Status
MOVX A,@DPTR
JZ $ + 5H
LJMP ?C0042
; {
; SOURCE LINE # 184
; if (control_reg & rbOPRDY) // Make sure that EP 0 has an Out Packet ready from host
; SOURCE LINE # 185
MOV DPTR,#control_reg?344
MOVX A,@DPTR
JB ACC.0,$ + 6H
LJMP ?C0042
; { // although if EP0 is idle, this should always be the case
; SOURCE LINE # 186
; Fifo_ReadC(FIFO_EP0, 8, (BYTE *)&Setup);
; SOURCE LINE # 187
MOV R3,#01H
MOV R2,#HIGH (Setup)
MOV R1,#LOW (Setup)
MOV R5,#08H
MOV R4,#00H
MOV R7,#020H
LCALL _Fifo_ReadC
; // Get Setup Packet off of Fifo, it is currently Big-Endian
;
; // Compiler Specific - these next three statements swap the
; // bytes of the setup packet words to Big Endian so they
; // can be compared to other 16-bit values elsewhere properly
; Setup.wValue.i = Setup.wValue .c[MSB] + 256*Setup.wValue.c[LSB];
; SOURCE LINE # 193
MOV DPTR,#Setup+03H
MOVX A,@DPTR
MOV R6,A
MOV DPTR,#Setup+02H
MOVX A,@DPTR
MOV R4,#00H
LCALL L?0139
; Setup.wIndex.i = Setup.wIndex .c[MSB] + 256*Setup.wIndex.c[LSB];
; SOURCE LINE # 194
MOV DPTR,#Setup+05H
MOVX A,@DPTR
MOV DPTR,#Setup+04H
LCALL L?0138
; Setup.wLength.i = Setup.wLength.c[MSB] + 256*Setup.wLength.c[LSB];
; SOURCE LINE # 195
MOV DPTR,#Setup+07H
MOVX A,@DPTR
MOV DPTR,#Setup+06H
LCALL L?0138
;
; switch(Setup.bRequest) // Call correct subroutine to handle each kind of
; SOURCE LINE # 197
MOV DPTR,#Setup+01H
MOVX A,@DPTR
CJNE A,#0CH,?C0132
?C0132:
JNC ?C0054
MOV DPTR,#?C0133
MOV R0,A
ADD A,R0
ADD A,R0
JMP @A+DPTR
?C0133:
LJMP ?C0045
LJMP ?C0046
LJMP ?C0054
LJMP ?C0047
LJMP ?C0054
LJMP ?C0048
LJMP ?C0049
LJMP ?C0054
LJMP ?C0050
LJMP ?C0051
LJMP ?C0052
LJMP ?C0053
; { // standard request
; SOURCE LINE # 198
; case GET_STATUS:
; SOURCE LINE # 199
?C0045:
; Get_Status();
; SOURCE LINE # 200
LCALL Get_Status
; break;
; SOURCE LINE # 201
SJMP ?C0042
; case CLEAR_FEATURE:
; SOURCE LINE # 202
?C0046:
; Clear_Feature();
; SOURCE LINE # 203
LCALL Clear_Feature
; break;
; SOURCE LINE # 204
SJMP ?C0042
; case SET_FEATURE:
; SOURCE LINE # 205
?C0047:
; Set_Feature();
; SOURCE LINE # 206
LCALL Set_Feature
; break;
; SOURCE LINE # 207
SJMP ?C0042
; case SET_ADDRESS:
; SOURCE LINE # 208
?C0048:
; Set_Address();
; SOURCE LINE # 209
LCALL Set_Address
; break;
; SOURCE LINE # 210
SJMP ?C0042
; case GET_DESCRIPTOR:
; SOURCE LINE # 211
?C0049:
; Get_Descriptor();
; SOURCE LINE # 212
LCALL Get_Descriptor
; break;
; SOURCE LINE # 213
SJMP ?C0042
; case GET_CONFIGURATION:
; SOURCE LINE # 214
?C0050:
; Get_Configuration();
; SOURCE LINE # 215
LCALL Get_Configuration
; break;
; SOURCE LINE # 216
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -