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

📄 f34x_msd_usb_isr.src

📁 USB读写SD卡例程
💻 SRC
📖 第 1 页 / 共 4 页
字号:
	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 + -