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

📄 f34x_msd_sect_serv.src

📁 USB读写SD卡例程
💻 SRC
📖 第 1 页 / 共 3 页
字号:
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	DPTR,#MBR+0FH
	MOVX 	A,@DPTR
	ADD  	A,R7
	MOV  	R7,A
	MOV  	DPTR,#MBR+0EH
	MOVX 	A,@DPTR
	ADDC 	A,R6
	MOV  	R6,A
	RET  	
L?0055:
	USING	0
	MOV  	R4,A
L?0056:
	MOV  	DPTR,#sector?647
	LJMP 	?C?LSTXDATA
L?0057:
	USING	0
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#HIGH (Scratch)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (Scratch)
	MOVX 	@DPTR,A
	RET  	
; END OF Com0026

; void Sect_Validate(void) reentrant

	RSEG  ?PR?_?Sect_Validate?F34X_MSD_SECT_SERV
_?Sect_Validate:
	USING	0
			; SOURCE LINE # 78
	MOV  	DPTR,#0FFFBH
	LCALL	?C?ADDXBP
; {
;   unsigned  fat_sec = 0;
			; SOURCE LINE # 80
	LCALL	L?0052
	CLR  	A
	MOVX 	@DPTR,A
	INC  	DPTR
; 
;   bootrecord_large* bootrecord=Scratch;
			; SOURCE LINE # 82
	LCALL	L?0051
	INC  	DPTR
	INC  	DPTR
	INC  	A
	LCALL	L?0057
;   MBR.valid=0;
			; SOURCE LINE # 83
	CLR  	A
	MOV  	DPTR,#MBR
	MOVX 	@DPTR,A
;   MBR.hidden_sectors = 0;
			; SOURCE LINE # 84
	MOV  	DPTR,#MBR+0EH
	MOVX 	@DPTR,A
	INC  	DPTR
; 
;   if((bootrecord->signature[0]!=0x55) || (bootrecord->signature[1]!=0xAA)) {
			; SOURCE LINE # 86
	LCALL	L?0041
	MOV  	DPTR,#01FEH
	LCALL	?C?CLDOPTR
	XRL  	A,#055H
	JZ   	$ + 5H
	LJMP 	?C0003
	MOV  	DPTR,#01FFH
	LCALL	?C?CLDOPTR
	XRL  	A,#0AAH
	JZ   	$ + 5H
	LJMP 	?C0003
;     return;
;   }
			; SOURCE LINE # 88
?C0001:
;   if(PHYSICAL_BLOCK_SIZE != ntohs(bootrecord->bytes_per_sector)) {
			; SOURCE LINE # 89
	MOV  	DPTR,#0BH
	LCALL	L?0049
	MOV  	A,R7
	JNZ  	?C0035
	MOV  	A,R6
	XRL  	A,#02H
?C0035:
	JZ   	$ + 5H
	LJMP 	?_?Sect_Validate?Check_MBR
;     goto Check_MBR;
			; SOURCE LINE # 90
;   }
			; SOURCE LINE # 91
?C0004:
;   if(bootrecord->filesystem[0]!='F' || bootrecord->filesystem[1]!='A' || bootrecord->filesystem[2]!='T' || bootrecord->filesystem[3]!='1' || bootrecord->filesystem[4]!='6') {
			; SOURCE LINE # 92
	LCALL	L?0042
	MOV  	DPTR,#036H
	LCALL	?C?CLDOPTR
	XRL  	A,#046H
	JZ   	$ + 5H
	LJMP 	?_?Sect_Validate?Check_MBR
	MOV  	DPTR,#037H
	LCALL	?C?CLDOPTR
	XRL  	A,#041H
	JZ   	$ + 5H
	LJMP 	?_?Sect_Validate?Check_MBR
	MOV  	DPTR,#038H
	LCALL	?C?CLDOPTR
	XRL  	A,#054H
	JNZ  	?_?Sect_Validate?Check_MBR
	MOV  	DPTR,#039H
	LCALL	?C?CLDOPTR
	XRL  	A,#031H
	JNZ  	?_?Sect_Validate?Check_MBR
	MOV  	DPTR,#03AH
	LCALL	?C?CLDOPTR
	XRL  	A,#036H
	JNZ  	?_?Sect_Validate?Check_MBR
;     goto Check_MBR;
			; SOURCE LINE # 93
;   }
			; SOURCE LINE # 94
?C0006:
; 
; 	// Make a permanent copy of the important fields of the bootrecord:
;   MBR.fat_copies = bootrecord->fat_copies;
			; SOURCE LINE # 97
	MOV  	DPTR,#010H
	LCALL	?C?CLDOPTR
	MOV  	DPTR,#MBR+01H
	MOVX 	@DPTR,A
;   MBR.root_directory_entries = ntohs(bootrecord->root_directory_entries);
			; SOURCE LINE # 98
	MOV  	DPTR,#011H
	LCALL	L?0049
	MOV  	DPTR,#MBR+02H
;   MBR.number_of_sectors = ntohs(bootrecord->number_of_sectors);
			; SOURCE LINE # 99
	LCALL	L?0039
	MOV  	DPTR,#013H
	LCALL	L?0054
	MOV  	DPTR,#MBR+04H
;   MBR.sectors_per_fat = ntohs(bootrecord->sectors_per_fat);
			; SOURCE LINE # 100
	LCALL	L?0039
	MOV  	DPTR,#016H
	LCALL	L?0054
	MOV  	DPTR,#MBR+06H
;   MBR.total_sectors = ntohl(bootrecord->total_sectors);
			; SOURCE LINE # 101
	LCALL	L?0040
	MOV  	DPTR,#020H
	LCALL	?C?LLDOPTR
	LCALL	_htonl
	MOV  	DPTR,#MBR+08H
	LCALL	?C?LSTXDATA
;   MBR.reserved_sectors = ntohs(bootrecord->reserved_sectors);
			; SOURCE LINE # 102
	LCALL	L?0042
	MOV  	DPTR,#0EH
	LCALL	?C?ILDOPTR
	MOV  	R7,A
	MOV  	R6,B
	LCALL	_htons
	MOV  	DPTR,#MBR+0CH
;   MBR.sectors_per_cluster = bootrecord->sectors_per_cluster;
			; SOURCE LINE # 103
	LCALL	L?0040
	MOV  	DPTR,#0DH
	LCALL	?C?CLDOPTR
	MOV  	DPTR,#MBR+010H
	MOVX 	@DPTR,A
;   MBR.valid=1;
			; SOURCE LINE # 104
	MOV  	DPTR,#MBR
	MOV  	A,#01H
	MOVX 	@DPTR,A
	SJMP 	?C0003
;   return;
; Check_MBR:
			; SOURCE LINE # 106
?_?Sect_Validate?Check_MBR:
; 	// checks if this sector is not a MBR
;   if((Scratch[0x1Be] == 0x80) || (Scratch[0x1Be] == 0x00)) {
			; SOURCE LINE # 108
	MOV  	DPTR,#Scratch+01BEH
	MOVX 	A,@DPTR
	MOV  	R7,A
	XRL  	A,#080H
	JZ   	?C0009
	MOV  	A,R7
	JNZ  	?C0003
?C0009:
; 	//	partition is active
;     fat_sec = *(unsigned*)&Scratch[0x1c6];
			; SOURCE LINE # 110
	MOV  	DPTR,#Scratch+01C6H
	MOVX 	A,@DPTR
	MOV  	R7,A
	INC  	DPTR
	MOVX 	A,@DPTR
	LCALL	L?0052
	XCH  	A,R7
;     fat_sec = ntohs(fat_sec);
			; SOURCE LINE # 111
	LCALL	L?0050
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	LCALL	_htons
	LCALL	L?0052
	MOV  	A,R6
;     Sect_Read(fat_sec);
			; SOURCE LINE # 112
	LCALL	L?0050
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	CLR  	A
	MOV  	R4,A
	MOV  	R5,A
	LCALL	_Sect_Read
;     Sect_Validate();
			; SOURCE LINE # 113
	LCALL	_?Sect_Validate
;     MBR.hidden_sectors = fat_sec;		
			; SOURCE LINE # 114
	LCALL	L?0052
	MOVX 	A,@DPTR
	MOV  	R7,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	DPTR,#MBR+0EH
	XCH  	A,R7
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
;   }
			; SOURCE LINE # 115
; }
			; SOURCE LINE # 116
?C0003:
	MOV  	DPTR,#05H
	LJMP 	?C?ADDXBP
L?0049:
	LCALL	?C?ILDOPTR
	MOV  	R7,A
	MOV  	R6,B
	LCALL	_htons
	RET  	
L?0054:
	LCALL	?C?ILDOPTR
	MOV  	R7,A
	MOV  	R6,B
	LCALL	_htons
	RET  	
; END OF _?Sect_Validate

; 
; //----------------------------------------------------------------------------
; // Sect_Init
; //----------------------------------------------------------------------------
; //
; // Function initializes memory card (Compact Flash or MMC), reads sector 0 and 
; // checks the validate of bootrecord.
; //
; // Parameters   :
; // Return Value :
; //----------------------------------------------------------------------------
; 
; void Sect_Init(void)

	RSEG  ?PR?Sect_Init?F34X_MSD_SECT_SERV
Sect_Init:
	USING	0
			; SOURCE LINE # 129
; {
			; SOURCE LINE # 130
;   unsigned char xdata time_out = 0;
			; SOURCE LINE # 131
	CLR  	A
	MOV  	DPTR,#time_out?140
	MOVX 	@DPTR,A
; #ifdef __F340_VER__
;   int xdata sizel,sizeh;
;   Is_Compact_Flash = 0;
;   if(Init_CF() != CF_NO_CARD) {
;     if(Identify_Drive(Scratch)!= CF_NO_CARD)
;     {
;       Is_Compact_Flash = 1;
;       sizel = (Scratch[115] << 8) | Scratch[114];
;       sizeh = (Scratch[117] << 8) | Scratch[116];
;       PHYSICAL_BLOCKS = ((unsigned long)sizeh << 16 ) | (sizel&0x0ffff);
;     }
;   }
;   if(!Is_Compact_Flash) {
; #else
;     Is_Compact_Flash = 0;
			; SOURCE LINE # 146
	MOV  	DPTR,#Is_Compact_Flash
	MOVX 	@DPTR,A
; #endif
;     MMC_FLASH_Init(); 
			; SOURCE LINE # 148
	LCALL	MMC_FLASH_Init
; #ifdef __F340_VER__
;   }
; #endif
; 	Sect_Read(0);	
			; SOURCE LINE # 152
	MOV  	R7,#00H
	MOV  	R6,#00H
	MOV  	R5,#00H
	MOV  	R4,#00H
	LCALL	_Sect_Read
; 	Sect_Validate();
			; SOURCE LINE # 153
	LJMP 	_?Sect_Validate
; END OF Sect_Init

; }
; 
; 
; //----------------------------------------------------------------------------
; // Sect_Sectors
; //----------------------------------------------------------------------------
; //
; // Returns number of sectors.
; //
; // Parameters   :
; // Return Value :
; //----------------------------------------------------------------------------
; 
; unsigned long Sect_Sectors(void)

	RSEG  ?PR?Sect_Sectors?F34X_MSD_SECT_SERV
Sect_Sectors:
	USING	0
			; SOURCE LINE # 167
; {
			; SOURCE LINE # 168
;   return PHYSICAL_BLOCKS;//MBR.number_of_sectors;
			; SOURCE LINE # 169
	MOV  	DPTR,#PHYSICAL_BLOCKS
	LCALL	L?0048
; }
			; SOURCE LINE # 170
?C0011:
	RET  	
; END OF Sect_Sectors

; 
; 
; //----------------------------------------------------------------------------
; // Sect_Print
; //----------------------------------------------------------------------------
; //
; // Dumps some information (size, bootrecord, filesystem, etc.)
; //
; // Parameters   :
; // Return Value :
; //----------------------------------------------------------------------------
; 
; void Sect_Print(void)

	RSEG  ?PR?Sect_Print?F34X_MSD_SECT_SERV
Sect_Print:
	USING	0
			; SOURCE LINE # 183
; {
			; SOURCE LINE # 184
;   bootrecord_large* xdata bootrecord=Scratch;
			; SOURCE LINE # 185
	MOV  	DPTR,#bootrecord?341
	MOV  	A,#01H
	LCALL	L?0057
;   if(!MBR.valid)  {
			; SOURCE LINE # 186
	MOV  	DPTR,#MBR
	MOVX 	A,@DPTR
	JNZ  	?C0012
;     printf("ERROR: Bootrecord invalid." ENDLINE);
			; SOURCE LINE # 187
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_0)
	MOV  	R1,#LOW (?SC_0)
	SJMP 	?C0037
;     return;
;   }
			; SOURCE LINE # 189
?C0012:
; 
;   printf("%s size = %lu bytes" ENDLINE,Is_Compact_Flash ? "CF memory" : "Memory", (DWORD)Sect_Sectors()*Sect_Block_Size());
			; SOURCE LINE # 191
	LCALL	Sect_Sectors
	CLR  	A
	MOV  	R3,A
	MOV  	R2,#02H
	MOV  	R1,A
	MOV  	R0,A
	LCALL	?C?LMUL
	MOV  	DPTR,#?_printf?BYTE+06H
	LCALL	?C?LSTXDATA
	MOV  	DPTR,#Is_Compact_Flash
	MOVX 	A,@DPTR
	MOV  	R3,#0FFH
	JZ   	?C0014
	MOV  	R2,#HIGH (?SC_51)
	MOV  	R1,#LOW (?SC_51)
	SJMP 	?C0015
?C0014:
	MOV  	R2,#HIGH (?SC_61)
	MOV  	R1,#LOW (?SC_61)
?C0015:
	MOV  	DPTR,#?_printf?BYTE+03H
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_29)
	MOV  	R1,#LOW (?SC_29)
?C0037:
	LCALL	_printf
; 
; }
			; SOURCE LINE # 193
?C0013:
	RET  	
; END OF Sect_Print

; 
; //----------------------------------------------------------------------------
; // Sect_Read
; //----------------------------------------------------------------------------
; //
; // Reads one sector into Scratch buffer
; //
; // Parameters   : sector - sector's number
; // Return Value : error number
; //----------------------------------------------------------------------------
; 
; unsigned  Sect_Read(unsigned long sector) 

	RSEG  ?PR?_Sect_Read?F34X_MSD_SECT_SERV
_Sect_Read:
	USING	0
			; SOURCE LINE # 205
	MOV  	DPTR,#sector?442
	LCALL	?C?LSTXDATA
; {
			; SOURCE LINE # 206
;   unsigned xdata error;
; #ifdef __F340_VER__
;   if(!Is_Compact_Flash) {
; #endif
;     unsigned char xdata loopguard = 0;
			; SOURCE LINE # 211
	CLR  	A
	MOV  	DPTR,#loopguard?444
	MOVX 	@DPTR,A
?C0016:
;     while((error = MMC_FLASH_Block_Read(sector+HIDDEN_SECTORS,Scratch)) != 0) 
			; SOURCE LINE # 212
	MOV  	DPTR,#sector?442

⌨️ 快捷键说明

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