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

📄 f34x_msd_usb_std_req.src

📁 USB读写SD卡例程
💻 SRC
📖 第 1 页 / 共 4 页
字号:
;    {
			; SOURCE LINE # 397
?C0097:
;      POLL_WRITE_BYTE(E0CSR, rbSOPRDY);          // Service Setup Packet
			; SOURCE LINE # 398
	MOV  	A,USB0ADR
	JB   	ACC.7,?C0097
?C0098:
;      Ep_Status[0] = EP_TX;                      // Put endpoint in transmit mode
			; SOURCE LINE # 399
;      Data_Sent = 0;                              // Reset Data Sent counter
			; SOURCE LINE # 400
	LCALL	L?0156
;    }
			; SOURCE LINE # 401
; }
			; SOURCE LINE # 402
?C0099:
	RET  	
; END OF Get_Descriptor

; 
; 
; //----------------------------------------------------------------------------
; // Get_Configuration
; //----------------------------------------------------------------------------
; //
; // This routine returns current configuration value
; //
; // Parameters   :
; // Return Value :
; //----------------------------------------------------------------------------
; 
; void Get_Configuration(void)

	RSEG  ?PR?Get_Configuration?F34X_MSD_USB_STD_REQ
Get_Configuration:
	USING	0
			; SOURCE LINE # 415
; {
			; SOURCE LINE # 416
;    if ((Setup.bmRequestType != OUT_DEVICE)    ||// This request must be directed to the device
			; SOURCE LINE # 417
	MOV  	DPTR,#Setup
	MOVX 	A,@DPTR
	XRL  	A,#080H
	JNZ  	?C0101
	MOV  	DPTR,#Setup+02H
	MOVX 	A,@DPTR
	JNZ  	?C0101
	INC  	DPTR
	MOVX 	A,@DPTR
	JNZ  	?C0101
	INC  	DPTR
	MOVX 	A,@DPTR
	JNZ  	?C0101
	INC  	DPTR
	MOVX 	A,@DPTR
	JNZ  	?C0101
	INC  	DPTR
	MOVX 	A,@DPTR
	JNZ  	?C0101
	INC  	DPTR
	MOVX 	A,@DPTR
	XRL  	A,#01H
	JZ   	?C0100
?C0101:
;    Setup.wValue.c[MSB]  || Setup.wValue.c[LSB]||// with value word set to zero
;    Setup.wIndex.c[MSB]  || Setup.wIndex.c[LSB]||// and index set to zero
;    Setup.wLength.c[MSB] || (Setup.wLength.c[LSB] != 1))// and setup length set to one
;    {
			; SOURCE LINE # 421
;       Force_Stall();                            // Otherwise send a stall to host
			; SOURCE LINE # 422
	LCALL	Force_Stall
;    }
			; SOURCE LINE # 423
	SJMP 	?C0102
?C0100:
; 
;    else 
;    {
			; SOURCE LINE # 426
;       if (USB_State == DEV_CONFIGURED)          // If the device is configured, then return value 0x01
			; SOURCE LINE # 427
	MOV  	DPTR,#USB_State
	MOVX 	A,@DPTR
	MOV  	R7,A
	CJNE 	A,#04H,?C0103
;       {                                         // since this software only supports one configuration
			; SOURCE LINE # 428
;          Data_Ptr = (BYTE*)&ONES_PACKET;
			; SOURCE LINE # 429
	MOV  	DPTR,#Data_Ptr
	LCALL	L?0164
;          Data_Size = 1;
			; SOURCE LINE # 430
	LCALL	L?0165
	INC  	A
	MOVX 	@DPTR,A
;       }
			; SOURCE LINE # 431
?C0103:
;       if (USB_State == DEV_ADDRESS)             // If the device is in address state, it is not
			; SOURCE LINE # 432
	MOV  	A,R7
	CJNE 	A,#03H,?C0102
;       {                                         // configured, so return 0x00
			; SOURCE LINE # 433
;          Data_Ptr = (BYTE*)&ZERO_PACKET;
			; SOURCE LINE # 434
	LCALL	L?0158
;          Data_Size = 1;
			; SOURCE LINE # 435
	LCALL	L?0166
	INC  	A
	MOVX 	@DPTR,A
;       }
			; SOURCE LINE # 436
;    }
			; SOURCE LINE # 437
?C0102:
;    if (Ep_Status[0] != EP_STALL)
			; SOURCE LINE # 438
	LCALL	L?0162
	JZ   	?C0108
;    {
			; SOURCE LINE # 439
?C0106:
;       POLL_WRITE_BYTE(E0CSR, rbSOPRDY);         // Set Serviced Out Packet bit
			; SOURCE LINE # 440
	MOV  	A,USB0ADR
	JB   	ACC.7,?C0106
?C0107:
;       Ep_Status[0] = EP_TX;                     // Put endpoint into transmit mode
			; SOURCE LINE # 441
;       Data_Sent = 0;                             // Reset Data Sent counter to zero
			; SOURCE LINE # 442
	LCALL	L?0157
;    }
			; SOURCE LINE # 443
; }
			; SOURCE LINE # 444
?C0108:
	RET  	
; END OF Get_Configuration

; 
; //----------------------------------------------------------------------------
; // Set_Configuration
; //----------------------------------------------------------------------------
; //
; // This routine allows host to change current
; // device configuration value
; //
; // Parameters   :
; // Return Value :
; //----------------------------------------------------------------------------
; 
; void Set_Configuration(void)

	RSEG  ?PR?Set_Configuration?F34X_MSD_USB_STD_REQ
Set_Configuration:
	USING	0
			; SOURCE LINE # 457
; {
			; SOURCE LINE # 458
; 
;    if ((USB_State == DEV_DEFAULT)             ||// Device must be addressed before configured
			; SOURCE LINE # 460
	MOV  	DPTR,#USB_State
	MOVX 	A,@DPTR
	XRL  	A,#02H
	JZ   	?C0110
	MOV  	DPTR,#Setup
	MOVX 	A,@DPTR
	JNZ  	?C0110
	MOV  	DPTR,#Setup+04H
	MOVX 	A,@DPTR
	JNZ  	?C0110
	INC  	DPTR
	MOVX 	A,@DPTR
	JNZ  	?C0110
	INC  	DPTR
	MOVX 	A,@DPTR
	JNZ  	?C0110
	INC  	DPTR
	MOVX 	A,@DPTR
	JNZ  	?C0110
	MOV  	DPTR,#Setup+02H
	MOVX 	A,@DPTR
	JNZ  	?C0110
	INC  	DPTR
	MOVX 	A,@DPTR
	SETB 	C
	SUBB 	A,#01H
	JC   	?C0109
?C0110:
;    (Setup.bmRequestType != IN_DEVICE)         ||// and request recipient must be the device
;    Setup.wIndex.c[MSB]  || Setup.wIndex.c[LSB]||// the index and length words must be zero
;    Setup.wLength.c[MSB] || Setup.wLength.c[LSB] || 
;    Setup.wValue.c[MSB]  || (Setup.wValue.c[LSB] > 1))// This software only supports config = 0,1
;    {
			; SOURCE LINE # 465
;       Force_Stall();                            // Send stall if setup data is invalid
			; SOURCE LINE # 466
	LCALL	Force_Stall
;    }
			; SOURCE LINE # 467
	SJMP 	?C0111
?C0109:
; 
;    else
;    {
			; SOURCE LINE # 470
;       if (Setup.wValue.c[LSB] > 0)              // Any positive configuration request
			; SOURCE LINE # 471
	MOV  	DPTR,#Setup+03H
	MOVX 	A,@DPTR
	SETB 	C
	SUBB 	A,#00H
	JC   	?C0112
;       {                                         // results in configuration being set to 1
			; SOURCE LINE # 472
;          USB_State = DEV_CONFIGURED;
			; SOURCE LINE # 473
	MOV  	DPTR,#USB_State
	MOV  	A,#04H
	MOVX 	@DPTR,A
;          Ep_Status[1] = EP_IDLE;                // Set endpoint status to idle (enabled)
			; SOURCE LINE # 474
	CLR  	A
	MOV  	DPTR,#Ep_Status+01H
	MOVX 	@DPTR,A
;          Ep_Status[2] = EP_IDLE;
			; SOURCE LINE # 475
	INC  	DPTR
	MOVX 	@DPTR,A
?C0113:
;          POLL_WRITE_BYTE(INDEX, EP1_IN_IDX);             // Change index to endpoint 1
			; SOURCE LINE # 476
	MOV  	A,USB0ADR
	JB   	ACC.7,?C0113
?C0114:
	LCALL	L?0174
?C0115:
;          POLL_WRITE_BYTE(EINCSR2, rbInDIRSEL);  // Set DIRSEL to indicate endpoint 1 is IN
			; SOURCE LINE # 477
	MOV  	A,USB0ADR
	JB   	ACC.7,?C0115
?C0116:
	MOV  	USB0ADR,#012H
	MOV  	USB0DAT,#020H
?C0117:
; //	Not necessary for Mass Storage Device (bulk data)
; //         Handle_In1();                          // Put first data packet on fifo
; //
;          POLL_WRITE_BYTE(INDEX, EP0_IDX);             // Set index back to endpoint 0
			; SOURCE LINE # 481
	MOV  	A,USB0ADR
	JB   	ACC.7,?C0117
?C0118:
	MOV  	USB0ADR,#0EH
	CLR  	A
	MOV  	USB0DAT,A
;       }
			; SOURCE LINE # 482
	SJMP 	?C0111
?C0112:
;       else
;       {
			; SOURCE LINE # 484
;          USB_State = DEV_ADDRESS;               // Unconfigures device by setting state to 
			; SOURCE LINE # 485
	MOV  	DPTR,#USB_State
	MOV  	A,#03H
	MOVX 	@DPTR,A
;          Ep_Status[1] = EP_HALT;                // address, and changing endpoint 1 and 2 
			; SOURCE LINE # 486
	MOV  	DPTR,#Ep_Status+01H
	MOVX 	@DPTR,A
;          Ep_Status[2] = EP_HALT;                // status to halt
			; SOURCE LINE # 487
	INC  	DPTR
	MOVX 	@DPTR,A
;       }
			; SOURCE LINE # 488
;    }     
			; SOURCE LINE # 489
?C0111:
;    if (Ep_Status[0] != EP_STALL)
			; SOURCE LINE # 490
	LCALL	L?0162
	JZ   	?C0123
;    {
			; SOURCE LINE # 491
?C0121:
;       POLL_WRITE_BYTE(E0CSR, (rbSOPRDY | rbDATAEND)); 
			; SOURCE LINE # 492
	MOV  	A,USB0ADR
	JB   	ACC.7,?C0121
?C0122:
	LCALL	L?0168
;                                                 // Indicate setup packet has been serviced
;    }
			; SOURCE LINE # 494
; }
			; SOURCE LINE # 495
?C0123:
	RET  	
; END OF Set_Configuration

; 
; //----------------------------------------------------------------------------
; // Get_Interface
; //----------------------------------------------------------------------------
; //
; // This routine returns 0x00, since only one interface
; // is supported by this firmware
; //
; // Parameters   :
; // Return Value :
; //----------------------------------------------------------------------------
; 
; void Get_Interface(void)

	RSEG  ?PR?Get_Interface?F34X_MSD_USB_STD_REQ
Get_Interface:
	USING	0
			; SOURCE LINE # 508
; {
			; SOURCE LINE # 509
; 
;    if ((USB_State != DEV_CONFIGURED)      ||    // If device is not configured
			; SOURCE LINE # 511
	LCALL	L?0172
	JNZ  	?C0125
	MOV  	DPTR,#Setup
	MOVX 	A,@DPTR
	XRL  	A,#081H
	JNZ  	?C0125
	MOV  	DPTR,#Setup+02H
	MOVX 	A,@DPTR
	JNZ  	?C0125
	INC  	DPTR
	MOVX 	A,@DPTR
	JNZ  	?C0125
	INC  	DPTR
	MOVX 	A,@DPTR
	JNZ  	?C0125
	INC  	DPTR
	MOVX 	A,@DPTR
	JNZ  	?C0125
	INC  	DPTR
	MOVX 	A,@DPTR
	JNZ  	?C0125
	INC  	DPTR
	MOVX 	A,@DPTR
	XRL  	A,#01H
	JZ   	?C0124
?C0125:
;    (Setup.bmRequestType != OUT_INTERFACE) ||    // or recipient is not an interface
;    Setup.wValue.c[MSB]  ||Setup.wValue.c[LSB] ||// or non-zero value or index fields
;    Setup.wIndex.c[MSB]  ||Setup.wIndex.c[LSB] ||// or data length not equal to one
;    Setup.wLength.c[MSB] ||(Setup.wLength.c[LSB] != 1))    
;    {
			; SOURCE LINE # 516
;       Force_Stall();                            // Then return stall due to invalid request
			; SOURCE LINE # 517
	LCALL	Force_Stall
;    }
			; SOURCE LINE # 518
	SJMP 	?C0126
?C0124:
; 
;    else
;    {
			; SOURCE LINE # 521
;       Data_Ptr = (BYTE*)&ZERO_PACKET;            // Otherwise, return 0x00 to host
			; SOURCE LINE # 522
	LCALL	L?0159
;       Data_Size = 1;
			; SOURCE LINE # 523
	LCALL	L?0166
	INC  	A
	MOVX 	@DPTR,A
;    }
			; SOURCE LINE # 524
?C0126:
;    if (Ep_Status[0] != EP_STALL)
			; SOURCE LINE # 525
	LCALL	L?0162
	JZ   	?C0130
;    {                       
			; SOURCE LINE # 526
?C0128:
;       POLL_WRITE_BYTE(E0CSR, rbSOPRDY);         // Set Serviced Setup packet, put endpoint in transmit
			; SOURCE LINE # 527
	MOV  	A,USB0ADR
	JB   	ACC.7,?C0128
?C0129:
;       Ep_Status[0] = EP_TX;                     // mode and reset Data sent counter
			; SOURCE LINE # 528
;       Data_Sent = 0;
			; SOURCE LINE # 529
	LCALL	L?0157
;    }
			; SOURCE LINE # 530
; }
			; SOURCE LINE # 531
?C0130:
	RET  	
; END OF Get_Interface

; 
; //----------------------------------------------------------------------------
; // Set_Interface
; //----------------------------------------------------------------------------
; //
; // This function sets interface if it's supported
; //
; // Parameters   :
; // Return Value :
; //----------------------------------------------------------------------------
; 
; void Set_Interface(void)

	RSEG  ?PR?Set_Interface?F34X_MSD_USB_STD_REQ
Set_Interface:
	USING	0
			; SOURCE LINE # 543
; {
			; SOURCE LINE # 544
;    if ((Setup.bmRequestType != IN_INTERFACE)  ||// Make sure request is directed at interface
			; SOURCE LINE # 545
	MOV  	DPTR,#Setup
	MOVX 	A,@DPTR
	XRL  	A,#01H
	JNZ  	?C0132
	MOV  	DPTR,#Setup+06H
	MOVX 	A,@DPTR
	JNZ  	?C0132
	INC  	DPTR
	MOVX 	A,@DPTR
	JNZ  	?C0132
	MOV  	DPTR,#Setup+02H
	MOVX 	A,@DPTR
	JNZ  	?C0132
	INC  	DPTR
	MOVX 	A,@DPTR
	JNZ  	?C0132
	INC  	DPTR
	MOVX 	A,@DPTR
	JNZ  	?C0132
	INC  	DPTR
	MOVX 	A,@DPTR
	JZ   	?C0131
?C0132:
;    Setup.wLength.c[MSB] ||Setup.wLength.c[LSB]||// and all other packet values are set to zero
;    Setup.wValue.c[MSB]  ||Setup.wValue.c[LSB] || 
;    Setup.wIndex.c[MSB]  ||Setup.wIndex.c[LSB])
;    {
			; SOURCE LINE # 549
;       Force_Stall();                            // Othewise send a stall to host
			; SOURCE LINE # 550
	LCALL	Force_Stall
;    }
			; SOURCE LINE # 551
?C0131:
;    if (Ep_Status[0] != EP_STALL)
			; SOURCE LINE # 552
	LCALL	L?0162
	JZ   	?C0136
;    {
			; SOURCE LINE # 553
?C0134:
;       POLL_WRITE_BYTE(E0CSR, (rbSOPRDY | rbDATAEND)); 
			; SOURCE LINE # 554
	MOV  	A,USB0ADR
	JB   	ACC.7,?C0134
?C0135:
	LCALL	L?0168
;                                                 // Indicate setup packet has been serviced
;    }
			; SOURCE LINE # 556
; }
			; SOURCE LINE # 557
?C0136:
	RET  	
; END OF Set_Interface

	END

⌨️ 快捷键说明

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