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

📄 upsd3400_usb_app.src

📁 U-disk reference design
💻 SRC
📖 第 1 页 / 共 5 页
字号:
; .\upsd3400_usb_app.SRC generated from: upsd3400_usb_app.c
; COMPILER INVOKED BY:
;        C:\Keil\C51\BIN\C51.EXE upsd3400_usb_app.c BROWSE DEBUG OBJECTEXTEND SRC(.\upsd3400_usb_app.SRC)

$NOMOD51

NAME	UPSD3400_USB_APP

SPICON0	DATA	0D6H
TB81	BIT	0D8H.3
SPICON1	DATA	0D7H
P1	DATA	090H
SM01	BIT	0D8H.7
SM11	BIT	0D8H.6
UPAIR	DATA	0E3H
IRDACON	DATA	0CEH
P3	DATA	0B0H
SM21	BIT	0D8H.5
AC	BIT	0D0H.6
P4	DATA	0C0H
EA	BIT	0A8H.7
WDKEY	DATA	0AEH
SPICLKD	DATA	0D2H
IE	DATA	0A8H
P1_0	BIT	090H.0
PCACH0	DATA	0A3H
P1_1	BIT	090H.1
USIZE	DATA	0F2H
PCACH1	DATA	0BBH
P3_0	BIT	0B0H.0
P1_2	BIT	090H.2
P4_0	BIT	0C0H.0
P3_1	BIT	0B0H.1
P1_3	BIT	090H.3
UIE0	DATA	0E4H
P4_1	BIT	0C0H.1
P3_2	BIT	0B0H.2
P1_4	BIT	090H.4
UIF0	DATA	0E8H
UIE1	DATA	0E5H
PCACL0	DATA	0A2H
P4_2	BIT	0C0H.2
P3_3	BIT	0B0H.3
P1_5	BIT	090H.5
EXF2	BIT	0C8H.6
UIF1	DATA	0E9H
UIE2	DATA	0E6H
WDRST	DATA	0A6H
PCACL1	DATA	0BAH
REN1	BIT	0D8H.4
P4_3	BIT	0C0H.3
P3_4	BIT	0B0H.4
P1_6	BIT	090H.6
UIF2	DATA	0EAH
UIE3	DATA	0E7H
P4_4	BIT	0C0H.4
P3_5	BIT	0B0H.5
P1_7	BIT	090H.7
ES	BIT	0A8H.4
UIF3	DATA	0EBH
S1SETUP	DATA	0DBH
P4_5	BIT	0C0H.5
P3_6	BIT	0B0H.6
IP	DATA	0B8H
P4_6	BIT	0C0H.6
P3_7	BIT	0B0H.7
RI	BIT	098H.0
P4_7	BIT	0C0H.7
CY	BIT	0D0H.7
TI	BIT	098H.1
P1SFS0	DATA	08EH
P1SFS1	DATA	08FH
NAKF	BIT	0E8H.4
ACON	DATA	097H
P4SFS0	DATA	092H
RCAP2H	DATA	0CBH
PS	BIT	0B8H.4
P4SFS1	DATA	093H
SP	DATA	081H
OV	BIT	0D0H.2
SUSPNDF	BIT	0E8H.2
RCAP2L	DATA	0CAH
C_T2	BIT	0C8H.1
EOPF	BIT	0E8H.1
SPISTAT	DATA	0D3H
DPTC	DATA	085H
RCLK	BIT	0C8H.5
CAPCOMH0	DATA	0ADH
TCLK	BIT	0C8H.4
CAPCOMH1	DATA	0B1H
CAPCOMH2	DATA	0B3H
CAPCOMH3	DATA	0C2H
SBUF	DATA	099H
PCON	DATA	087H
CAPCOMH4	DATA	0C4H
CAPCOML0	DATA	0ACH
CAPCOMH5	DATA	0C6H
CAPCOML1	DATA	0AFH
CAPCOML2	DATA	0B2H
SCON	DATA	098H
USCI	DATA	0F5H
CAPCOML3	DATA	0C1H
TMOD	DATA	089H
TCON	DATA	088H
UCON	DATA	0F1H
DPTM	DATA	086H
CAPCOML4	DATA	0C3H
CAPCOML5	DATA	0C5H
UCTL	DATA	0ECH
UBASEH	DATA	0F3H
USEL	DATA	0EFH
TCMMODE0	DATA	0A9H
TCMMODE1	DATA	0AAH
IE0	BIT	088H.1
UBASEL	DATA	0F4H
USTA	DATA	0EDH
TCMMODE2	DATA	0ABH
PCASTA	DATA	0A5H
OUTF	BIT	0E8H.5
IE1	BIT	088H.3
TCMMODE3	DATA	0BDH
RSTF	BIT	0E8H.3
TCMMODE4	DATA	0BEH
TCMMODE5	DATA	0BFH
B	DATA	0F0H
USCV	DATA	0F6H
CP_RL2	BIT	0C8H.0
ACC	DATA	0E0H
ES0	BIT	0A8H.4
ET0	BIT	0A8H.1
ET1	BIT	0A8H.3
TF0	BIT	088H.5
ET2	BIT	0A8H.5
EDB	BIT	0A8H.6
TF1	BIT	088H.7
ADAT0	DATA	095H
RB8	BIT	098H.2
RI1	BIT	0D8H.0
TF2	BIT	0C8H.7
BUSCON	DATA	09DH
ADAT1	DATA	096H
TH0	DATA	08CH
EX0	BIT	0A8H.0
IT0	BIT	088H.0
TH1	DATA	08DH
TB8	BIT	098H.3
TI1	BIT	0D8H.1
EX1	BIT	0A8H.2
IT1	BIT	088H.2
TH2	DATA	0CDH
P	BIT	0D0H.0
IEA	DATA	0A7H
SM0	BIT	098H.7
TL0	DATA	08AH
SM1	BIT	098H.6
TL1	DATA	08BH
SM2	BIT	098H.5
TL2	DATA	0CCH
PS0	BIT	0B8H.4
RESUMF	BIT	0E8H.0
PT0	BIT	0B8H.1
CCON0	DATA	0F9H
PT1	BIT	0B8H.3
RS0	BIT	0D0H.3
CCON1	DATA	0FAH
PT2	BIT	0B8H.5
PDB	BIT	0B8H.6
TR0	BIT	088H.4
RS1	BIT	0D0H.4
CCON2	DATA	0FBH
SPIRDR	DATA	0D5H
TR1	BIT	088H.6
CCON3	DATA	0FCH
PX0	BIT	0B8H.0
TR2	BIT	0C8H.2
SPITDR	DATA	0D4H
GLF	BIT	0E8H.7
PX1	BIT	0B8H.2
IPA	DATA	0B7H
S1ADR	DATA	0DFH
DPH	DATA	083H
INF	BIT	0E8H.6
S1DAT	DATA	0DEH
DPL	DATA	082H
SBUF0	DATA	099H
SBUF1	DATA	0D9H
EXEN2	BIT	0C8H.3
SCON0	DATA	098H
REN	BIT	098H.4
S1CON	DATA	0DCH
SCON1	DATA	0D8H
PCACON0	DATA	0A4H
PCACON1	DATA	0BCH
T2CON	DATA	0C8H
PWMF0	DATA	0B4H
PWMF1	DATA	0C7H
ADCPS	DATA	094H
S1STA	DATA	0DDH
P3SFS	DATA	091H
UADDR	DATA	0E2H
F0	BIT	0D0H.5
PSW	DATA	0D0H
RB81	BIT	0D8H.2
?PR?ReturnCSW?UPSD3400_USB_APP           SEGMENT CODE 
?PR?SpecificIncrementSectorAddress?UPSD3400_USB_APP SEGMENT CODE 
?PR?EraseMainFlashSector?UPSD3400_USB_APP SEGMENT CODE 
?PR?_WriteToMainFlash?UPSD3400_USB_APP   SEGMENT CODE 
?PR?WriteBufferToFlash?UPSD3400_USB_APP  SEGMENT CODE 
?DT?WriteBufferToFlash?UPSD3400_USB_APP  SEGMENT DATA OVERLAYABLE 
?PR?ReadBufferFromFlash?UPSD3400_USB_APP SEGMENT CODE 
?PR?DoReadWrite?UPSD3400_USB_APP         SEGMENT CODE 
?DT?DoReadWrite?UPSD3400_USB_APP         SEGMENT DATA OVERLAYABLE 
?PR?OnRequestSense?UPSD3400_USB_APP      SEGMENT CODE 
?PR?OnInquiry?UPSD3400_USB_APP           SEGMENT CODE 
?PR?OnModeSelect6?UPSD3400_USB_APP       SEGMENT CODE 
?PR?OnModeSense6?UPSD3400_USB_APP        SEGMENT CODE 
?PR?OnModeSelect10?UPSD3400_USB_APP      SEGMENT CODE 
?PR?OnModeSense10?UPSD3400_USB_APP       SEGMENT CODE 
?PR?DoReadCapacity?UPSD3400_USB_APP      SEGMENT CODE 
?PR?DoReadFormatCapacity?UPSD3400_USB_APP SEGMENT CODE 
?PR?CheckReceiveCBW?UPSD3400_USB_APP     SEGMENT CODE 
?PR?UsbIsr?UPSD3400_USB_APP              SEGMENT CODE 
?DT?UPSD3400_USB_APP SEGMENT DATA 
	EXTRN	DATA (setupPacket)
	EXTRN	CODE (TransmitEP0)
	EXTRN	CODE (STALL_EP1)
	EXTRN	CODE (OnSetupPacket)
	EXTRN	DATA (usbState)
	EXTRN	CODE (OnUsbSuspend)
	EXTRN	XDATA (UPSD_xreg)
	EXTRN	CODE (OnUsbResume)
	EXTRN	CODE (ReadSetupPacket)
	EXTRN	CODE (OnUsbReset)
	EXTRN	CODE (?C?LSHL)
	EXTRN	CODE (?C?ULSHR)
	EXTRN	CODE (?C?CCASE)
	PUBLIC	gbBulkPipeStage
	PUBLIC	gdwCBWDataTransferLength
	PUBLIC	gbCSWStatus
	PUBLIC	gdwCBWTag
	PUBLIC	gbCBWCB
	PUBLIC	gbCBWFlags
	PUBLIC	gbCBWLUN
	PUBLIC	gbCBWCBLength
	PUBLIC	USB_ISR_Counter
	PUBLIC	UsbIsr
	PUBLIC	CheckReceiveCBW
	PUBLIC	DoReadFormatCapacity
	PUBLIC	DoReadCapacity
	PUBLIC	OnModeSense10
	PUBLIC	OnModeSelect10
	PUBLIC	OnModeSense6
	PUBLIC	OnModeSelect6
	PUBLIC	OnInquiry
	PUBLIC	OnRequestSense
	PUBLIC	DoReadWrite
	PUBLIC	ReadBufferFromFlash
	PUBLIC	WriteBufferToFlash
	PUBLIC	_WriteToMainFlash
	PUBLIC	EraseMainFlashSector
	PUBLIC	SpecificIncrementSectorAddress
	PUBLIC	ReturnCSW

	RSEG  ?DT?WriteBufferToFlash?UPSD3400_USB_APP
?WriteBufferToFlash?BYTE:
          j?451:   DS   1
       page?452:   DS   1
          i?453:   DS   2
SectorEndPhysicalDataAddr?454:   DS   2

	RSEG  ?DT?DoReadWrite?UPSD3400_USB_APP
?DoReadWrite?BYTE:
LogicalBlockAddr?655:   DS   4

	RSEG  ?DT?UPSD3400_USB_APP
USB_ISR_Counter:   DS   1
  gbCBWCBLength:   DS   1
       gbCBWLUN:   DS   1
     gbCBWFlags:   DS   1
        gbCBWCB:   DS   16
 TransferLength:   DS   2
PhysicalDataAddr:   DS   2
      gdwCBWTag:   DS   4
    gbCSWStatus:   DS   1
gdwCBWDataTransferLength:   DS   4
gbBulkPipeStage:   DS   1
; /*------------------------------------------------------------------------------
; upsd3400_usb_app.c
; 
; Version:
; September 13, 2005 Ver 1.1 - Updated disclaimer, renamed file.
; March 22, 2005 - Version 1.0 - Initial Release.
; 
; Description:  USB Mass Storage Class application module. 
; 
; Compilers:
; Raisonance, Keil
; 
; THIS INFORMATION (or THIS SOFTWARE or THIS DOCUMENT) IS FOR GUIDANCE ONLY. ST 
; MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS 
; SOFTWARE nor for any infringement of patents or other rights of third parties 
; which may result from its use. ST MICROELECTRONICS SHALL NOT BE HELD LIABLE FOR 
; ANY DIRECT, INDIRECT INCIDENTAL OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY 
; CLAIMS ARISING IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, 
; OR USE OF THIS SOFTWARE. Specifications mentioned in this publication are 
; subject to change without notice. This publication supersedes and replaces all 
; information previously supplied. STMicroelectronics products are not authorized 
; for use as critical components in life support devices or systems without the 
; express written approval of STMicroelectronics.
; ------------------------------------------------------------------------------*/
; 
; #pragma NOAREGS
; 
; #include "upsd3400.h"
; #include "upsd3400_hardware.h"
; #include "upsd3400_usb.h"
; #include "upsd3400_upsd_usb.h"
; #include "upsd3400_usb_app.h"
; 
; #define USB_MS_SectorSize 512
; #define USB_MS_UnitSize   (USB_MS_SectorSize*9*64)
; 
; extern xdata PSD_REGS UPSD_xreg;
; 
; data unsigned      char gbCBWCB[16];
; data unsigned long  int gdwCBWTag;
; data unsigned long  int gdwCBWDataTransferLength;
; data unsigned      char gbCBWFlags;
; data unsigned      char gbCBWLUN;
; data unsigned      char gbCBWCBLength;
; data unsigned      char gbCSWStatus;
; data unsigned      char gbBulkPipeStage;
; 
; static data unsigned int TransferLength;
; static data unsigned int PhysicalDataAddr;
; 
; extern unsigned char data usbState, ep0state, ep1state;
; extern setup_buffer setupPacket;
; 
; #define USB_FIFO ((unsigned char volatile xdata *) USB_BASE_ADDR)
; 
; #define UMSC_IN_ENDPOINT SELEP1
; #define UMSC_OUT_ENDPOINT SELEP1
; 
; #define UMSC_MASK_IN_ENDPOINT IN1F
; #define UMSC_MASK_OUT_ENDPOINT OUT1F
; 
; 
; void ReturnCSW(void)

	RSEG  ?PR?ReturnCSW?UPSD3400_USB_APP
ReturnCSW:
			; SOURCE LINE # 63
; /******************************************************************************
;   Function   : void ReturnCSW(void)
;   Parameters : none
;   Description: Handle CSW package.
;                Command Status Wrapper (CSW) shall start on a packet boundary
;                and shall end as a short packet with exactly 13 (0Dh) bytes
;                transferred. Fields appear aligned to byte offsets equal to
;                a multiple of their byte size. All CSW transfers shall
;                be ordered with the LSB (byte 0) first (little endian).
;    ******************************************************************************/
;  {
			; SOURCE LINE # 74
;   USEL  = INDIR | UMSC_IN_ENDPOINT;          //Select EP1 IN
			; SOURCE LINE # 75
	MOV  	USEL,#01H
; 
; /*dCSWSignature:
;   Signature that helps identify this data packet as a CSW. The signature field
;   shall contain the value 53425355h (little endian), indicating CSW. */
;   USB_FIFO[ 0] = 0x55;                       // dCSWSignature
			; SOURCE LINE # 80
	MOV  	DPTR,#07000H
	MOV  	A,#055H
	MOVX 	@DPTR,A
;   USB_FIFO[ 1] = 0x53;
			; SOURCE LINE # 81
	INC  	DPTR
	MOV  	A,#053H
	MOVX 	@DPTR,A
;   USB_FIFO[ 2] = 0x42;
			; SOURCE LINE # 82
	INC  	DPTR
	MOV  	A,#042H
	MOVX 	@DPTR,A
;   USB_FIFO[ 3] = 0x53;
			; SOURCE LINE # 83
	INC  	DPTR
	MOV  	A,#053H
	MOVX 	@DPTR,A
; /*dCSWTag:
;   The device shall set this field to the value received in the dCBWTag
;   of the associated CBW.*/
;   USB_FIFO[ 4] = *((uchar *)&gdwCBWTag+3);   // dCSWTag, LSB read first
			; SOURCE LINE # 87
	INC  	DPTR
	MOV  	A,gdwCBWTag+03H
	MOVX 	@DPTR,A
;   USB_FIFO[ 5] = *((uchar *)&gdwCBWTag+2);
			; SOURCE LINE # 88
	INC  	DPTR
	MOV  	A,gdwCBWTag+02H
	MOVX 	@DPTR,A
;   USB_FIFO[ 6] = *((uchar *)&gdwCBWTag+1);
			; SOURCE LINE # 89
	INC  	DPTR
	MOV  	A,gdwCBWTag+01H
	MOVX 	@DPTR,A
;   USB_FIFO[ 7] = *((uchar *)&gdwCBWTag+0);
			; SOURCE LINE # 90
	INC  	DPTR
	MOV  	A,gdwCBWTag
	MOVX 	@DPTR,A
; /*dCSWDataResidue:
;   For Data-Out the device shall report in the dCSWDataResidue the difference
;   between
;   the amount of data expected as stated in the dCBWDataTransferLength,
;   and the actual amount of data processed by the device.
;   For Data-In the device shall report in the dCSWDataResidue the difference
;   between the amount of data expected as stated in the dCBWDataTransferLength
;   and the actual amount of relevant data sent by the device.
;   The dCSWDataResidue shall not exceed the value sent in the dCBWDataTransferLength.
;   We return always zero, it is simple.
;   */
;   USB_FIFO[ 8] = 0x00;                       // dCSWDataResidue
			; SOURCE LINE # 102
	INC  	DPTR
	CLR  	A
	MOVX 	@DPTR,A
;   USB_FIFO[ 9] = 0x00;
			; SOURCE LINE # 103
	INC  	DPTR
	MOVX 	@DPTR,A
;   USB_FIFO[10] = 0x00;
			; SOURCE LINE # 104
	INC  	DPTR
	MOVX 	@DPTR,A
;   USB_FIFO[11] = 0x00;
			; SOURCE LINE # 105
	INC  	DPTR
	MOVX 	@DPTR,A
; /*bCSWStatus:
;   bCSWStatus indicates the success or failure of the command.
;   The device shall set this byte to zero if the command completed successfully.
;   A non-zero value shall indicate a failure during command execution according
;   to the following table:
;   00h Command Passed ("good status")
;   01h Command Failed
;   02h Phase Error
;   03h and 04h Reserved (Obsolete)
;   05h to FFh Reserved
;   */
;   USB_FIFO[12] = gbCSWStatus;                // bCSWStatus
			; SOURCE LINE # 117
	INC  	DPTR
	MOV  	A,gbCSWStatus
	MOVX 	@DPTR,A
; 
;   USIZE = 0x0D;                              // fire !
			; SOURCE LINE # 119
	MOV  	USIZE,#0DH
; 
;   gbBulkPipeStage = BS_CSW_DONE_PHASE;
			; SOURCE LINE # 121
	MOV  	gbBulkPipeStage,#03H
;  }
			; SOURCE LINE # 122
	RET  	
; END OF ReturnCSW

; 
; void SpecificIncrementSectorAddress(void)

	RSEG  ?PR?SpecificIncrementSectorAddress?UPSD3400_USB_APP
SpecificIncrementSectorAddress:
			; SOURCE LINE # 124
; /******************************************************************************
;  Function   : void SpecificIncrementSectorAddress(void)
;  Parameters : none
;  Description: Increments PhysicalDataAddr of 512b (1 sector),
;               adjust PAGE and TransferLength.
;               Used in Read and Write Commands
;  ******************************************************************************/
;  {
			; SOURCE LINE # 132
;   PhysicalDataAddr   += 64;                  // next sector physical address
			; SOURCE LINE # 133
	MOV  	A,#040H
	ADD  	A,PhysicalDataAddr+01H
	MOV  	PhysicalDataAddr+01H,A
	CLR  	A
	ADDC 	A,PhysicalDataAddr
	MOV  	PhysicalDataAddr,A
;   if (PhysicalDataAddr < 0x8000)
			; SOURCE LINE # 134
	CLR  	C
	SUBB 	A,#080H

⌨️ 快捷键说明

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