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

📄 f34x_msd_mmc.src

📁 USB读写SD卡例程
💻 SRC
📖 第 1 页 / 共 5 页
字号:
;     Wait_ms(1);
			; SOURCE LINE # 836
	LCALL	L?0171
;     card_status.i = MMC_Command_Exec(SEND_OP_COND,EMPTY,EMPTY);
			; SOURCE LINE # 837
	MOV  	DPTR,#?_MMC_Command_Exec?BYTE+01H
	LCALL	?C?LSTKXDATA
	DB   	00H
	DB   	00H
	DB   	00H
	DB   	00H
	LCALL	L?0154
	MOV  	R7,#01H
	LCALL	L?0145
;     if(!++loopguard) break;
			; SOURCE LINE # 838
	LCALL	L?0156
	JZ   	?C0081
;   } while ((card_status.b[0] & 0x01));
			; SOURCE LINE # 839
?C0080:
	MOV  	DPTR,#card_status?255
	MOVX 	A,@DPTR
	JB   	ACC.0,?C0082
?C0081:
;   printf("count SEND_OP_COND: %d\n",loopguard);
			; SOURCE LINE # 840
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_0)
	MOV  	R1,#LOW (?SC_0)
	MOV  	DPTR,#loopguard?253
	MOVX 	A,@DPTR
	MOV  	R7,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	DPTR,#?_printf?BYTE+03H
	XCH  	A,R7
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
	LCALL	_printf
; 
;   if(!loopguard) return;
			; SOURCE LINE # 842
	MOV  	DPTR,#loopguard?253
	MOVX 	A,@DPTR
	JNZ  	?C0123
	INC  	DPTR
	MOVX 	A,@DPTR
?C0123:
	JNZ  	$ + 5H
	LJMP 	?C0085
?C0084:
; 
; #ifdef __F326_VER__
;   Write_Read_Spi_Byte(0xFF);
; #else
; 
; #ifdef SEND__IN_FUNCTION
;   Write_Read_Spi_Byte(0xFF);
			; SOURCE LINE # 849
	MOV  	R7,#0FFH
	LCALL	_Write_Read_Spi_Byte
; #else
;   SPI0DAT = 0xFF;                     // Send 8 more SPI clocks to complete
;   while(!SPIF){}                      // the initialization sequence;
;   SPIF = 0;
; #endif
; #endif
;   loopguard=0;
			; SOURCE LINE # 856
	LCALL	L?0168
?C0088:
; 
;   do                                  // Read the Operating Conditions 
;   {                                   // Register (OCR);
			; SOURCE LINE # 859
;     card_status.i = MMC_Command_Exec(READ_OCR,EMPTY,pchar);
			; SOURCE LINE # 860
	MOV  	DPTR,#?_MMC_Command_Exec?BYTE+01H
	LCALL	?C?LSTKXDATA
	DB   	00H
	DB   	00H
	DB   	00H
	DB   	00H
	LCALL	L?0141
	MOV  	R7,#017H
	LCALL	L?0152
;     if(!++loopguard) break;
			; SOURCE LINE # 861
	LCALL	L?0156
	JZ   	?C0087
;   } while(!(*pchar&0x80));              // Check the card busy bit of the OCR;
			; SOURCE LINE # 862
?C0086:
	MOV  	DPTR,#pchar?257
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	DPL,A
	MOV  	DPH,R6
	MOVX 	A,@DPTR
	JNB  	ACC.7,?C0088
?C0087:
;   if(!loopguard) return;
			; SOURCE LINE # 863
	MOV  	DPTR,#loopguard?253
	MOVX 	A,@DPTR
	JNZ  	?C0124
	INC  	DPTR
	MOVX 	A,@DPTR
?C0124:
	JNZ  	$ + 5H
	LJMP 	?C0085
?C0090:
; 
;   card_status.i = MMC_Command_Exec(SEND_STATUS,EMPTY,EMPTY);
			; SOURCE LINE # 865
	MOV  	DPTR,#?_MMC_Command_Exec?BYTE+01H
	LCALL	?C?LSTKXDATA
	DB   	00H
	DB   	00H
	DB   	00H
	DB   	00H
	LCALL	L?0155
	MOV  	R7,#05H
	LCALL	L?0152
;                                        // Get the Card Specific Data (CSD)
;                                        // register to determine the size of the
;                                        // MMC;
;   for(i=0;i<4;i++) {
			; SOURCE LINE # 869
	CLR  	A
	MOV  	DPTR,#i?254
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
?C0091:
	LCALL	L?0158
	SUBB 	A,#04H
	MOV  	A,R6
	XRL  	A,#080H
	SUBB 	A,#080H
	JNC  	?C0092
;     printf("0x%02bX ",pchar[i]);
			; SOURCE LINE # 870
;   }
			; SOURCE LINE # 871
	LCALL	L?0139
	JNZ  	?C0125
	LCALL	L?0174
?C0125:
	SJMP 	?C0091
?C0092:
; 
;   card_status.i = MMC_Command_Exec(SEND_CSD,EMPTY,pchar);
			; SOURCE LINE # 873
	MOV  	DPTR,#?_MMC_Command_Exec?BYTE+01H
	LCALL	?C?LSTKXDATA
	DB   	00H
	DB   	00H
	DB   	00H
	DB   	00H
	LCALL	L?0141
	MOV  	R7,#02H
	LCALL	L?0172
; 	
;   if(card_status.i==0) {
			; SOURCE LINE # 875
	MOV  	DPTR,#card_status?255
	MOVX 	A,@DPTR
	JNZ  	?C0126
	INC  	DPTR
	MOVX 	A,@DPTR
?C0126:
	JNZ  	?C0094
;     printf("Change speed");
			; SOURCE LINE # 876
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_33)
	MOV  	R1,#LOW (?SC_33)
;     for(i=0;i<16;i++) {
			; SOURCE LINE # 877
	LCALL	L?0166
?C0095:
	LCALL	L?0158
	SUBB 	A,#010H
	MOV  	A,R6
	XRL  	A,#080H
	SUBB 	A,#080H
	JNC  	?C0096
;       printf("0x%02bX ",pchar[i]);
			; SOURCE LINE # 878
;     }
			; SOURCE LINE # 879
	LCALL	L?0139
	JNZ  	?C0127
	LCALL	L?0174
?C0127:
	SJMP 	?C0095
?C0096:
; 	#ifdef F340_M24
;     SPI0CKR = 0;
; 	#else
;     SPI0CKR = 1;
			; SOURCE LINE # 883
	MOV  	SPI0CKR,#01H
; 	#endif
;     Wait_ms(1);
			; SOURCE LINE # 885
	MOV  	R7,#01H
	MOV  	R6,#00H
	LCALL	_Wait_ms
;   } else {
			; SOURCE LINE # 886
	LJMP 	?C0098
?C0094:
;     printf("CARD STATUS 0x%02X:\n",card_status.i);
			; SOURCE LINE # 887
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_46)
	MOV  	R1,#LOW (?SC_46)
	MOV  	DPTR,#card_status?255
	MOVX 	A,@DPTR
	MOV  	R7,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	DPTR,#?_printf?BYTE+03H
	XCH  	A,R7
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
;   	for(i=0;i<16;i++) {
			; SOURCE LINE # 888
	LCALL	L?0166
?C0099:
	LCALL	L?0159
	SUBB 	A,#010H
	MOV  	A,R6
	XRL  	A,#080H
	SUBB 	A,#080H
	JNC  	?C0100
;       printf("0x%02bX ",pchar[i]);
			; SOURCE LINE # 889
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_24)
	MOV  	R1,#LOW (?SC_24)
	MOV  	DPTR,#pchar?257
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	ADD  	A,R7
	MOV  	DPL,A
	MOV  	A,R4
	ADDC 	A,R6
	MOV  	DPH,A
	MOVX 	A,@DPTR
	MOV  	DPTR,#?_printf?BYTE+03H
	MOVX 	@DPTR,A
	LCALL	_printf
;     }
			; SOURCE LINE # 890
	MOV  	DPTR,#i?254+01H
	MOVX 	A,@DPTR
	INC  	A
	MOVX 	@DPTR,A
	JNZ  	?C0128
	LCALL	L?0175
?C0128:
	SJMP 	?C0099
?C0100:
;     PHYSICAL_BLOCKS = 0;
			; SOURCE LINE # 891
	MOV  	DPTR,#PHYSICAL_BLOCKS
	LCALL	?C?LSTKXDATA
	DB   	00H
	DB   	00H
	DB   	00H
	DB   	00H
;     PHYSICAL_SIZE = PHYSICAL_BLOCKS * bl_len;
			; SOURCE LINE # 892
	LCALL	L?0148
	MOV  	R3,A
	LCALL	?C?LMUL
	MOV  	DPTR,#PHYSICAL_SIZE
	LJMP 	?C?LSTXDATA
;     return;
;   }
			; SOURCE LINE # 894
?C0098:
; 
;   card_status.i = MMC_Command_Exec(SET_BLOCKLEN,(unsigned long)PHYSICAL_BLOCK_SIZE,EMPTY);
			; SOURCE LINE # 896
	MOV  	DPTR,#?_MMC_Command_Exec?BYTE+01H
	LCALL	?C?LSTKXDATA
	DB   	00H
	DB   	00H
	DB   	02H
	DB   	00H
	LCALL	L?0155
	MOV  	R7,#06H
	LCALL	L?0172
; 
;   bl_len = 1 << (pchar[5] & 0x0f) ;
			; SOURCE LINE # 898
	MOV  	DPTR,#pchar?257
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	ADD  	A,#05H
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,R4
	MOV  	DPH,A
	MOVX 	A,@DPTR
	ANL  	A,#0FH
	LCALL	L?0176
	SJMP 	?C0130
?C0129:
	CLR  	C
	RLC  	A
	XCH  	A,R6
	RLC  	A
	XCH  	A,R6
?C0130:
	DJNZ 	R0,?C0129
	MOV  	DPTR,#bl_len?259+01H
	MOVX 	@DPTR,A
	MOV  	A,R6
	MOV  	DPTR,#bl_len?259
	MOVX 	@DPTR,A
;   c_size = ((pchar[6] & 0x03) << 10) | 
			; SOURCE LINE # 899
	MOV  	A,R5
	ADD  	A,#06H
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,R4
	MOV  	DPH,A
	MOVX 	A,@DPTR
	ANL  	A,#03H
	ADD  	A,ACC
	ADD  	A,ACC
	MOV  	R4,A
	MOV  	DPTR,#pchar?257
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R3,A
	ADD  	A,#07H
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,R2
	MOV  	DPH,A
	MOVX 	A,@DPTR
	MOV  	B,#04H
	MUL  	AB
	MOV  	R7,A
	MOV  	A,R4
	ORL  	A,B
	MOV  	R6,A
	MOV  	A,R3
	ADD  	A,#08H
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,R2
	MOV  	DPH,A
	MOVX 	A,@DPTR
	ANL  	A,#0C0H
	SWAP 	A
	RRC  	A
	RRC  	A
	ANL  	A,#03H
	MOV  	R5,A
	MOV  	A,R7
	ORL  	A,R5
;---- Variable 'c_size?258' assigned to Register 'R2/R3' ----
	MOV  	R3,A
	XCH  	A,R2
	MOV  	A,R6
	XCH  	A,R2
;    			(pchar[7] << 2) | ((pchar[8] &0xc0) >> 6);
;   c_mult = (((pchar[9] & 0x03) << 1) | ((pchar[10] & 0x80) >> 7));
			; SOURCE LINE # 901
	MOV  	DPTR,#pchar?257
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	ADD  	A,#09H
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,R6
	MOV  	DPH,A
	MOVX 	A,@DPTR
	ANL  	A,#03H
	ADD  	A,ACC
	MOV  	R5,A
	MOV  	A,R7
	ADD  	A,#0AH
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,R6
	MOV  	DPH,A
	MOVX 	A,@DPTR
	ANL  	A,#080H
	MOV  	R7,A
	SWAP 	A
	RRC  	A
	RRC  	A
	RRC  	A
	ANL  	A,#01H
	ORL  	A,R5
	MOV  	DPTR,#c_mult?260
	MOVX 	@DPTR,A
;   
;                                        // Determine the number of MMC sectors;
;   PHYSICAL_BLOCKS = (unsigned long)(c_size+1)*(1 << (c_mult+2));
			; SOURCE LINE # 904
	XCH  	A,R6
	MOV  	A,R2
	XCH  	A,R6
	XCH  	A,R7
	MOV  	A,R3
	XCH  	A,R7
	MOV  	A,R7
	ADD  	A,#01H
	MOV  	R7,A
	CLR  	A
	ADDC 	A,R6
	MOV  	R6,A
	CLR  	A
	MOV  	R4,A
	MOV  	R5,A
	MOV  	A,R4
	PUSH 	ACC
	MOV  	A,R5
	PUSH 	ACC
	MOV  	A,R6
	PUSH 	ACC
	MOV  	A,R7
	PUSH 	ACC
	MOVX 	A,@DPTR
	ADD  	A,#02H
	LCALL	L?0176
	SJMP 	?C0132
?C0131:
	CLR  	C
	RLC  	A
	XCH  	A,R6
	RLC  	A
	XCH  	A,R6
?C0132:
	DJNZ 	R0,?C0131
	MOV  	R7,A
	MOV  	A,R6
	RLC  	A
	SUBB 	A,ACC
	MOV  	R5,A
	MOV  	R4,A
	POP  	ACC
	MOV  	R3,A
	POP  	ACC
	MOV  	R2,A
	POP  	ACC
	MOV  	R1,A
	POP  	ACC
	MOV  	R0,A
	LCALL	?C?LMUL
	MOV  	DPTR,#PHYSICAL_BLOCKS
	LCALL	?C?LSTXDATA
;   PHYSICAL_SIZE = PHYSICAL_BLOCKS * bl_len;
			; SOURCE LINE # 905
	LCALL	L?0148
	MOV  	R3,A
	LCALL	?C?LMUL
	MOV  	DPTR,#PHYSICAL_SIZE
	LCALL	?C?LSTXDATA
; 
;   loopguard = 0;
			; SOURCE LINE # 907
	LCALL	L?0169
?C0102:
; 
;   while((MMC_FLASH_Block_Read(0,Scratch)!=0)) {
			; SOURCE LINE # 909
	MOV  	R3,#01H
	MOV  	R2,#HIGH (Scratch)
	MOV  	R1,#LOW (Scratch)
	MOV  	R7,#00H
	MOV  	R6,#00H
	MOV  	R5,#00H
	MOV  	R4,#00H
	LCALL	_MMC_FLASH_Block_Read
	MOV  	A,R7
	ORL  	A,R6
	JZ   	?C0103
;     if(!++loopguard) break;
			; SOURCE LINE # 910
	LCALL	L?0157
	JNZ  	?C0102
;   } 
			; SOURCE LINE # 911
?C0103:
;   //printf("Wrong reads %d\n",loopguard);
; 
;   Is_Initialized = 1;
			; SOURCE LINE # 914
	SETB 	Is_Initialized
; 	
;   Led1=0;Led2=0;
			; SOURCE LINE # 916
	CLR  	Led1
	CLR  	Led2
; }
			; SOURCE LINE # 917
?C0085:
	RET  	
L?0139:
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_24)
	MOV  	R1,#LOW (?SC_24)
	MOV  	DPTR,#pchar?257
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	ADD  	A,R7
	MOV  	DPL,A
	MOV  	A,R4
	ADDC 	A,R6
	MOV  	DPH,A
	MOVX 	A,@DPTR
	MOV  	DPTR,#?_printf?BYTE+03H
	MOVX 	@DPTR,A
	

⌨️ 快捷键说明

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