📄 f34x_msd_mmc.src
字号:
; 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 + -