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

📄 f34x_msd_msd.src

📁 USB读写SD卡例程
💻 SRC
字号:
; .\F34x_MSD_MSD.SRC generated from: F34x_MSD_MSD.c
; COMPILER INVOKED BY:
;        C:\Keil\C51\BIN\C51.EXE F34x_MSD_MSD.c LARGE OPTIMIZE(9,SPEED) BROWSE NOAREGS DEBUG OBJECTEXTEND SRC(.\F34x_MSD_MSD.SRC)

$NOMOD51

NAME	F34X_MSD_MSD

CCF2	BIT	0D8H.2
TB80	BIT	098H.3
SPI0CKR	DATA	0A2H
CCF3	BIT	0D8H.3
P0	DATA	080H
SPIEN	BIT	0F8H.0
CCF4	BIT	0D8H.4
P1	DATA	090H
P2	DATA	0A0H
ADC0CF	DATA	0BCH
P3	DATA	0B0H
AC	BIT	0D0H.6
P4	DATA	0C7H
EIE1	DATA	0E6H
START_STOP_SPI	BIT	0B0H.0
EA	BIT	0A8H.7
MCE0	BIT	098H.5
EIE2	DATA	0E7H
USB0XCN	DATA	0D7H
PSCTL	DATA	08FH
CF	BIT	0D8H.7
IT01CF	DATA	0E4H
ADC0CN	DATA	0E8H
P0MDOUT	DATA	0A4H
P1MDOUT	DATA	0A5H
TMR2RLH	DATA	0CBH
IE	DATA	0A8H
P2MDOUT	DATA	0A6H
T2CE	BIT	0C8H.4
P3MDOUT	DATA	0A7H
TMR3RLH	DATA	093H
EIP1	DATA	0F6H
P4MDOUT	DATA	0AEH
TXBMT	BIT	0F8H.1
EIP2	DATA	0F7H
PCA0CPH0	DATA	0FCH
TMR2RLL	DATA	0CAH
PCA0CPH1	DATA	0EAH
TMR3RLL	DATA	092H
PCA0CPH2	DATA	0ECH
CR	BIT	0D8H.6
T2SPLIT	BIT	0C8H.3
TF2H	BIT	0C8H.7
PCA0CPH3	DATA	0EEH
REN0	BIT	098H.4
PCA0CPH4	DATA	0FEH
PCA0CPL0	DATA	0FBH
EMI0CF	DATA	085H
PCA0CPL1	DATA	0E9H
PCA0CPM0	DATA	0DAH
PCA0MD	DATA	0D9H
PCA0CN	DATA	0D8H
PCA0CPL2	DATA	0EBH
PCA0CPM1	DATA	0DBH
TF2L	BIT	0C8H.6
PCA0CPL3	DATA	0EDH
PCA0CPM2	DATA	0DCH
IP	DATA	0B8H
ARBLOST	BIT	0C0H.2
PCA0CPL4	DATA	0FDH
PCA0CPM3	DATA	0DDH
PCA0CPM4	DATA	0DEH
CY	BIT	0D0H.7
SI	BIT	0C0H.0
XBR0	DATA	0E1H
SMB0CF	DATA	0C1H
XBR1	DATA	0E2H
PFE0CN	DATA	0AFH
EMI0CN	DATA	0AAH
XBR2	DATA	0E3H
REF0CN	DATA	0D1H
REG0CN	DATA	0C9H
AD0INT	BIT	0E8H.5
SP	DATA	081H
EMI0TC	DATA	084H
OV	BIT	0D0H.2
SMB0CN	DATA	0C0H
MODF	BIT	0F8H.5
SBCON1	DATA	0ACH
START_STOP_WRITE_TO	BIT	0B0H.2
S0MODE	BIT	098H.7
VDM0CN	DATA	0FFH
P0MDIN	DATA	0F1H
CPT0MD	DATA	09DH
CPT0CN	DATA	09BH
P1MDIN	DATA	0F2H
CPT1MD	DATA	09CH
CPT1CN	DATA	09AH
P2MDIN	DATA	0F3H
TF2LEN	BIT	0C8H.5
P3MDIN	DATA	0F4H
P4MDIN	DATA	0F5H
SBRLH1	DATA	0B5H
SPI0CN	DATA	0F8H
PCON	DATA	087H
SBRLL1	DATA	0B4H
SPIF	BIT	0F8H.7
TMOD	DATA	089H
TCON	DATA	088H
WCOL	BIT	0F8H.6
NSSMD0	BIT	0F8H.2
NSSMD1	BIT	0F8H.3
TMR2CN	DATA	0C8H
P0SKIP	DATA	0D4H
TMR3CN	DATA	091H
START_STOP_READ_TO	BIT	0B0H.1
T2XCLK	BIT	0C8H.0
P1SKIP	DATA	0D5H
P2SKIP	DATA	0D6H
P3SKIP	DATA	0DFH
IE0	BIT	088H.1
CPT0MX	DATA	09FH
IE1	BIT	088H.3
OSCICL	DATA	0B3H
CPT1MX	DATA	09EH
CLKSEL	DATA	0A9H
B	DATA	0F0H
ADC0H	DATA	0BEH
OSCICN	DATA	0B2H
OSCLCN	DATA	086H
ADC0L	DATA	0BDH
ACC	DATA	0E0H
ES0	BIT	0A8H.4
AD0EN	BIT	0E8H.7
ET0	BIT	0A8H.1
ET1	BIT	0A8H.3
TF0	BIT	088H.5
CLKMUL	DATA	0B9H
ET2	BIT	0A8H.5
RI0	BIT	098H.0
TF1	BIT	088H.7
TH0	DATA	08CH
EX0	BIT	0A8H.0
TI0	BIT	098H.1
IT0	BIT	088H.0
PCA0H	DATA	0FAH
TH1	DATA	08DH
MASTER	BIT	0C0H.7
EX1	BIT	0A8H.2
IT1	BIT	088H.2
P	BIT	0D0H.0
ACK	BIT	0C0H.1
OSCXCN	DATA	0B1H
TL0	DATA	08AH
PCA0L	DATA	0F9H
TL1	DATA	08BH
TXMODE	BIT	0C0H.6
PS0	BIT	0B8H.4
PT0	BIT	0B8H.1
RS0	BIT	0D0H.3
PT1	BIT	0B8H.3
RS1	BIT	0D0H.4
PT2	BIT	0B8H.5
TR0	BIT	088H.4
AD0TM	BIT	0E8H.6
TR1	BIT	088H.6
TR2	BIT	0C8H.2
PX0	BIT	0B8H.0
PX1	BIT	0B8H.2
DPH	DATA	083H
ADC0GTH	DATA	0C4H
DPL	DATA	082H
ADC0GTL	DATA	0C3H
SBUF0	DATA	099H
ESPI0	BIT	0A8H.6
SBUF1	DATA	0D3H
ADC0LTH	DATA	0C6H
RSTSRC	DATA	0EFH
SCON0	DATA	098H
SMOD1	DATA	0E5H
SCON1	DATA	0D2H
AMX0N	DATA	0BAH
ADC0LTL	DATA	0C5H
AMX0P	DATA	0BBH
STA	BIT	0C0H.5
PSPI0	BIT	0B8H.6
SMB0DAT	DATA	0C2H
TMR2H	DATA	0CDH
SPI0CFG	DATA	0A1H
TMR3H	DATA	095H
CKCON	DATA	08EH
T2CSS	BIT	0C8H.1
RXOVRN	BIT	0F8H.4
TMR2L	DATA	0CCH
ACKRQ	BIT	0C0H.3
USB0ADR	DATA	096H
TMR3L	DATA	094H
F0	BIT	0D0H.5
FLSCL	DATA	0B6H
USB0DAT	DATA	097H
AD0CM0	BIT	0E8H.0
F1	BIT	0D0H.1
STO	BIT	0C0H.4
AD0CM1	BIT	0E8H.1
SPI0DAT	DATA	0A3H
AD0CM2	BIT	0E8H.2
AD0WINT	BIT	0E8H.3
AD0BUSY	BIT	0E8H.4
PSW	DATA	0D0H
CCF0	BIT	0D8H.0
RB80	BIT	098H.2
FLKEY	DATA	0B7H
CCF1	BIT	0D8H.1
?PR?Msd_Step?F34X_MSD_MSD                SEGMENT CODE 
?C_INITSEG           SEGMENT CODE 
?XD?F34X_MSD_MSD     SEGMENT XDATA 
?PR?F34X_MSD_MSD     SEGMENT CODE 
	EXTRN	CODE (_htonl)
	EXTRN	XDATA (Out_Count)
	EXTRN	CODE (_Out2_Get_Data)
	EXTRN	CODE (Scsi_Rx)
	EXTRN	XDATA (Scsi_Residue)
	EXTRN	CODE (Out2_Done)
	EXTRN	CODE (_USB_In)
	EXTRN	XDATA (Out_Packet)
	EXTRN	XDATA (Scsi_Status)
	EXTRN	CODE (?C?ULCMP)
	EXTRN	CODE (?C?LSTKXDATA)
	EXTRN	CODE (?C?LSTXDATA)
	PUBLIC	csw
	PUBLIC	cbw
	PUBLIC	Msd_State
	PUBLIC	Msd_Step

	RSEG  ?XD?F34X_MSD_MSD
      Msd_State:   DS   1
            cbw:   DS   31
            csw:   DS   13

	RSEG  ?C_INITSEG
	DB	041H
	DW	Msd_State
	DB	000H

; //-----------------------------------------------------------------------------
; // F34x_MSD_MSD.c
; //-----------------------------------------------------------------------------
; // Copyright 2006 Silicon Laboratories, Inc.
; // http://www.silabs.com
; //
; // Program Description:
; //
; // This module contains the crank function. This function is used to checking
; // the request and preparing the response action for its. The fact that it's 
; // crank function means that in one cycle this function can make only one step.
; // That means it can't check and response in this same cycle. It works more 
; // like state machine. One step can only repose for actual state and change 
; // this state to another. The response for other state occurs in next step.
; //
; //
; //
; // How To Test:    See Readme.txt
; //
; //
; // FID:            34X000046
; // Target:         C8051F34x
; // Tool chain:     Keil
; // Command Line:   See Readme.txt
; // Project Name:   F34x_USB_MSD
; //
; // Release 1.1
; //    -All changes by PKC
; //    -09 JUN 2006
; //    -No changes; incremented revision number to match project revision
; //
; // Release 1.0
; //    -Initial Release
; //
; 
; //-----------------------------------------------------------------------------
; // Includes
; //-----------------------------------------------------------------------------
; 
; #include "F34x_MSD_USB_Main.h"
; #include "F34x_MSD_Msd.h"
; #include "F34x_MSD_Scsi.h"
; #include "F34x_MSD_Util.h"
; #include <stdio.h>
; 
; #define DIRECTION_IN	0x80
; #define DIRECTION_OUT	0x00
; 
; #define CBW_SIGNATURE 0x55534243
; #define CSW_SIGNATURE 0x55534253
; 
; #define MSD_READY 					0x00
; #define MSD_COMMAND_TRANSPORT 		0x01
; #define MSD_DATA_IN					0x02
; #define MSD_DATA_OUT				0x03
; #define MSD_STATUS_TRANSPORT		0x04
; #define MSD_DATA					0x05
; #define MSD_DO_RESET				0xFF
; 
; BYTE xdata Msd_State=MSD_READY;
; 
; CBW xdata cbw;
; CSW xdata csw;
; 
; /*
; /* Removed these to safe some memory space (not called on Windows or MAC platform anyway).
; /*
; void Msd_Reset_(unsigned char itf) {
; 	itf=0; // Get rid of compiler warning
; 	Msd_State=MSD_DO_RESET;
; }
; 
; unsigned char Msd_GetMaxLUN(unsigned char itf) {
; 	return itf&0; // Only 1 LUN supported (itf&0 gets rid of compiler warning).
; }
; */
; 
; //----------------------------------------------------------------------------
; // Msd_Step
; //----------------------------------------------------------------------------
; //
; // This is a crank function. It checks if something is received and calls the
; // responding functions (USB).
; //
; // Parameters   :
; // Return Value :
; //----------------------------------------------------------------------------
; 

	RSEG  ?PR?F34X_MSD_MSD
Com000E:
L?0015:
	USING	0
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	RET  	
; END OF Com000E

; void Msd_Step()

	RSEG  ?PR?Msd_Step?F34X_MSD_MSD
Msd_Step:
	USING	0
			; SOURCE LINE # 89
; {
			; SOURCE LINE # 90
;   switch(Msd_State) {
			; SOURCE LINE # 91
	MOV  	DPTR,#Msd_State
	MOVX 	A,@DPTR
	ADD  	A,#0FCH
	JNZ  	$ + 5H
	LJMP 	?C0010
	DEC  	A
	JZ   	?C0009
	ADD  	A,#05H
	JZ   	$ + 5H
	LJMP 	?C0012
;     case MSD_READY:
			; SOURCE LINE # 92
?C0002:
;       if(Out_Count) {
			; SOURCE LINE # 93
	MOV  	DPTR,#Out_Count
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	ORL  	A,R6
	JNZ  	$ + 5H
	LJMP 	?C0005
;       // Look for a "valid" and "meaningful" CBW, as defined in the spec:
;       // Check size
;         if(Out_Count!=sizeof(CBW)) {
			; SOURCE LINE # 96
	MOV  	A,R7
	XRL  	A,#01FH
	ORL  	A,R6
	JZ   	?C0004
;           Out2_Get_Data(Out_Packet);
			; SOURCE LINE # 97
	MOV  	R3,#01H
	MOV  	R2,#HIGH (Out_Packet)
	MOV  	R1,#LOW (Out_Packet)
	LCALL	_Out2_Get_Data
;           Out2_Done();
			; SOURCE LINE # 98
	LJMP 	Out2_Done
;           return;
;         }
			; SOURCE LINE # 100
?C0004:
; 
;         Out2_Get_Data((BYTE*)&cbw);
			; SOURCE LINE # 102
	MOV  	R3,#01H
	MOV  	R2,#HIGH (cbw)
	MOV  	R1,#LOW (cbw)
	LCALL	_Out2_Get_Data
;         Out2_Done();
			; SOURCE LINE # 103
	LCALL	Out2_Done
; 
;         // Check signature, reserved bits & LUN
;         if((cbw.dCBWSignature!=CBW_SIGNATURE) ||
			; SOURCE LINE # 106
	MOV  	R7,#043H
	MOV  	R6,#042H
	MOV  	R5,#053H
	MOV  	R4,#055H
	MOV  	DPTR,#cbw
	MOVX 	A,@DPTR
	MOV  	R0,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R3,A
	CLR  	C
	LCALL	?C?ULCMP
	JNZ  	?C0005
	MOV  	DPTR,#cbw+0CH
	MOVX 	A,@DPTR
	MOV  	R7,A
	XRL  	A,#080H
	JZ   	?C0008
	MOV  	A,R7
	JNZ  	?C0005
?C0008:
	MOV  	DPTR,#cbw+0DH
	MOVX 	A,@DPTR
	MOV  	R7,A
	ANL  	A,#0F0H
	JNZ  	?C0005
	INC  	DPTR
	MOVX 	A,@DPTR
	SETB 	C
	SUBB 	A,#010H
	JNC  	?C0005
	MOV  	A,R7
	JNZ  	?C0005
;           ((cbw.bmCBWFlags!=DIRECTION_IN && cbw.bmCBWFlags!=DIRECTION_OUT) || (cbw.bCBWLUN&0xF0) || (cbw.bCBWCBLength>16)) ||
;           (cbw.bCBWLUN!=0x00)) {
			; SOURCE LINE # 108
;           return;
;         }
			; SOURCE LINE # 110
?C0006:
; 				
;         Msd_State=MSD_DATA;
			; SOURCE LINE # 112
	MOV  	DPTR,#Msd_State
	MOV  	A,#05H
	MOVX 	@DPTR,A
;       }
			; SOURCE LINE # 113
; 		  break;
			; SOURCE LINE # 114
	RET  	
; 
;     case MSD_DATA:
			; SOURCE LINE # 116
?C0009:
;       Scsi_Rx();
			; SOURCE LINE # 117
	LCALL	Scsi_Rx
;       Msd_State=MSD_STATUS_TRANSPORT;
			; SOURCE LINE # 118
	MOV  	DPTR,#Msd_State
	MOV  	A,#04H
	MOVX 	@DPTR,A
;       break;
			; SOURCE LINE # 119
	RET  	
; 
; 		case MSD_STATUS_TRANSPORT:
			; SOURCE LINE # 121
?C0010:
; 			// Reply with a CSW:
;       csw.dCSWSignature=CSW_SIGNATURE;
			; SOURCE LINE # 123
	MOV  	DPTR,#csw
	LCALL	?C?LSTKXDATA
	DB   	055H
	DB   	053H
	DB   	042H
	DB   	053H
;       csw.dCSWTag=cbw.dCBWTag;
			; SOURCE LINE # 124
	MOV  	DPTR,#cbw+04H
	LCALL	L?0015
	MOV  	DPTR,#csw+04H
	LCALL	?C?LSTXDATA
;       csw.bCSWStatus=Scsi_Status;
			; SOURCE LINE # 125
	MOV  	DPTR,#Scsi_Status
	MOVX 	A,@DPTR
	MOV  	DPTR,#csw+0CH
	MOVX 	@DPTR,A
;       csw.dCSWDataResidue=ntohl(Scsi_Residue);
			; SOURCE LINE # 126
	MOV  	DPTR,#Scsi_Residue
	LCALL	L?0015
	LCALL	_htonl
	MOV  	DPTR,#csw+08H
	LCALL	?C?LSTXDATA
; 
;       USB_In((BYTE*)&csw,sizeof(CSW));
			; SOURCE LINE # 128
	MOV  	R3,#01H
	MOV  	R2,#HIGH (csw)
	MOV  	R1,#LOW (csw)
	MOV  	R5,#0DH
	MOV  	R4,#00H
	LCALL	_USB_In
; 
;       Msd_State=MSD_READY;
			; SOURCE LINE # 130
;       break;
			; SOURCE LINE # 131
	SJMP 	?C0013
; 
;     case MSD_DO_RESET:
			; SOURCE LINE # 133
;       //printf("RESET! ");
;       // Fall-through
;     default:
			; SOURCE LINE # 136
?C0012:
; 			//printf("Unexpected MSD state!\n");
;       Msd_State=MSD_READY;
			; SOURCE LINE # 138
?C0013:
	CLR  	A
	MOV  	DPTR,#Msd_State
	MOVX 	@DPTR,A
;       break;
			; SOURCE LINE # 139
;   }
			; SOURCE LINE # 140
; }
			; SOURCE LINE # 141
?C0005:
	RET  	
; END OF Msd_Step

	END

⌨️ 快捷键说明

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