📄 sdio.src
字号:
RSEG ?PR?_CRC7?SDIO
_CRC7:
USING 0
; SOURCE LINE # 292
MOV chr?1552,R3
MOV chr?1552+01H,R2
MOV chr?1552+02H,R1
MOV cnt?1553,R4
MOV cnt?1553+01H,R5
; {
; SOURCE LINE # 293
; unsigned int i,a;
; unsigned char crc_7,Data;
; crc_7=0;
; SOURCE LINE # 296
CLR A
MOV crc_7?1556,A
; for(a=0;a<cnt;a++)
; SOURCE LINE # 297
;---- Variable 'a?1555' assigned to Register 'R6/R7' ----
MOV R7,A
MOV R6,A
?C0066:
CLR C
MOV A,R7
SUBB A,cnt?1553+01H
MOV A,R6
SUBB A,cnt?1553
JNC ?C0067
; {
; SOURCE LINE # 298
; Data=chr[a];
; SOURCE LINE # 299
MOV R3,chr?1552
MOV R2,chr?1552+01H
MOV R1,chr?1552+02H
MOV DPL,R7
MOV DPH,R6
LCALL ?C?CLDOPTR
;---- Variable 'Data?1557' assigned to Register 'R1' ----
MOV R1,A
; for (i=0;i<8;i++)
; SOURCE LINE # 300
;---- Variable 'i?1554' assigned to Register 'R4/R5' ----
CLR A
MOV R5,A
MOV R4,A
?C0069:
; {
; SOURCE LINE # 301
; crc_7<<=1;
; SOURCE LINE # 302
MOV A,crc_7?1556
ADD A,ACC
MOV crc_7?1556,A
; if((Data&0x80)^(crc_7&0x80))
; SOURCE LINE # 303
ANL A,#080H
MOV R3,A
MOV A,R1
ANL A,#080H
XRL A,R3
JZ ?C0072
; crc_7^=0x09;
; SOURCE LINE # 304
XRL crc_7?1556,#09H
?C0072:
; Data <<=1;
; SOURCE LINE # 305
MOV A,R1
ADD A,ACC
MOV R1,A
; }
; SOURCE LINE # 306
INC R5
CJNE R5,#00H,?C0327
INC R4
?C0327:
MOV A,R5
XRL A,#08H
ORL A,R4
JNZ ?C0069
; }
; SOURCE LINE # 307
?C0068:
INC R7
CJNE R7,#00H,?C0328
INC R6
?C0328:
SJMP ?C0066
?C0067:
; crc_7=(crc_7<<1)|1;
; SOURCE LINE # 308
MOV A,crc_7?1556
ADD A,ACC
ORL A,#01H
MOV crc_7?1556,A
; return(crc_7);
; SOURCE LINE # 309
MOV R7,A
; }
; SOURCE LINE # 310
?C0073:
RET
; END OF _CRC7
;
; unsigned char insert_crc7 (unsigned char *path_trace_message,int cnt)
RSEG ?PR?_insert_crc7?SDIO
_insert_crc7:
USING 0
; SOURCE LINE # 312
MOV cnt?1659,R4
MOV cnt?1659+01H,R5
MOV path_trace_message?1658,R3
MOV path_trace_message?1658+01H,R2
MOV path_trace_message?1658+02H,R1
; {
; SOURCE LINE # 313
; unsigned char crc7_accum = 0;
; SOURCE LINE # 314
CLR A
MOV crc7_accum?1660,A
; int i;
; unsigned char j;
; path_trace_message[0] &= ~0x7f;
; SOURCE LINE # 317
LCALL ?C?CLDPTR
ANL A,#080H
LCALL ?C?CSTPTR
; for (i=0;i<=cnt;++i)
; SOURCE LINE # 318
CLR A
MOV i?1661,A
MOV i?1661+01H,A
?C0074:
SETB C
MOV A,i?1661+01H
SUBB A,cnt?1659+01H
MOV A,cnt?1659
XRL A,#080H
MOV R0,A
MOV A,i?1661
XRL A,#080H
SUBB A,R0
JNC ?C0075
; {
; SOURCE LINE # 319
; crc7_accum =crc7_syndrome_table[(crc7_accum << 1)^path_trace_message[i]];
; SOURCE LINE # 320
MOV R3,path_trace_message?1658
MOV R2,path_trace_message?1658+01H
MOV R1,path_trace_message?1658+02H
MOV DPL,i?1661+01H
MOV DPH,i?1661
LCALL ?C?CLDOPTR
MOV R5,A
MOV A,crc7_accum?1660
ADD A,ACC
MOV R7,A
CLR A
RLC A
MOV R6,A
MOV A,R7
XRL A,R5
ADD A,#LOW (crc7_syndrome_table)
MOV DPL,A
MOV A,#HIGH (crc7_syndrome_table)
ADDC A,R6
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV crc7_accum?1660,A
; }
; SOURCE LINE # 321
INC i?1661+01H
MOV A,i?1661+01H
JNZ ?C0074
INC i?1661
?C0329:
SJMP ?C0074
?C0075:
; path_trace_message[0] ^= crc7_accum;
; SOURCE LINE # 322
MOV R3,path_trace_message?1658
MOV R2,path_trace_message?1658+01H
MOV R1,path_trace_message?1658+02H
LCALL ?C?CLDPTR
XRL A,crc7_accum?1660
LCALL ?C?CSTPTR
; path_trace_message[0]=(path_trace_message[0]<<1)|1;
; SOURCE LINE # 323
MOV R3,path_trace_message?1658
MOV R2,path_trace_message?1658+01H
MOV R1,path_trace_message?1658+02H
LCALL ?C?CLDPTR
ADD A,ACC
ORL A,#01H
LCALL ?C?CSTPTR
; j=path_trace_message[0];
; SOURCE LINE # 324
MOV R3,path_trace_message?1658
MOV R2,path_trace_message?1658+01H
MOV R1,path_trace_message?1658+02H
LCALL ?C?CLDPTR
MOV R7,A
MOV j?1662,A
; return(path_trace_message[0]);
; SOURCE LINE # 325
; }
; SOURCE LINE # 326
?C0077:
RET
; END OF _insert_crc7
;
; unsigned int CRC16(unsigned char * chr, int cnt)
RSEG ?PR?_CRC16?SDIO
_CRC16:
USING 0
; SOURCE LINE # 328
MOV chr?1763,R3
MOV chr?1763+01H,R2
MOV chr?1763+02H,R1
MOV cnt?1764,R4
MOV cnt?1764+01H,R5
; {
; SOURCE LINE # 329
; unsigned int i,j;
; //unsigned char crc_16;
; unsigned int crc_16=0xffff;
; SOURCE LINE # 332
MOV A,#0FFH
MOV crc_16?1767,A
MOV crc_16?1767+01H,A
; for(i=0;i<cnt;i++)
; SOURCE LINE # 333
;---- Variable 'i?1765' assigned to Register 'R4/R5' ----
CLR A
MOV R5,A
MOV R4,A
?C0078:
CLR C
MOV A,R5
SUBB A,cnt?1764+01H
MOV A,R4
SUBB A,cnt?1764
JNC ?C0079
; {
; SOURCE LINE # 334
; crc_16=crc_16^((unsigned int)chr[i]);
; SOURCE LINE # 335
MOV R3,chr?1763
MOV R2,chr?1763+01H
MOV R1,chr?1763+02H
MOV DPL,R5
MOV DPH,R4
LCALL ?C?CLDOPTR
XRL crc_16?1767+01H,A
CLR A
; for (j=0;j<8;j++)
; SOURCE LINE # 336
;---- Variable 'j?1766' assigned to Register 'R2/R3' ----
MOV R3,A
MOV R2,A
?C0081:
; {
; SOURCE LINE # 337
; if(crc_16&0x0001)
; SOURCE LINE # 338
MOV A,crc_16?1767+01H
JNB ACC.0,?C0084
; {
; SOURCE LINE # 339
; crc_16=(crc_16>>1)^0x8408;
; SOURCE LINE # 340
MOV A,crc_16?1767
CLR C
RRC A
MOV R6,A
MOV A,crc_16?1767+01H
RRC A
MOV R7,A
MOV A,R6
XRL A,#084H
MOV crc_16?1767,A
MOV A,R7
XRL A,#08H
MOV crc_16?1767+01H,A
; }
; SOURCE LINE # 341
SJMP ?C0083
?C0084:
; else
; crc_16=(crc_16>>1);
; SOURCE LINE # 343
MOV A,crc_16?1767
CLR C
RRC A
MOV crc_16?1767,A
MOV A,crc_16?1767+01H
RRC A
MOV crc_16?1767+01H,A
; }
; SOURCE LINE # 344
?C0083:
INC R3
CJNE R3,#00H,?C0330
INC R2
?C0330:
MOV A,R3
XRL A,#08H
ORL A,R2
JNZ ?C0081
; }
; SOURCE LINE # 345
?C0080:
INC R5
CJNE R5,#00H,?C0331
INC R4
?C0331:
SJMP ?C0078
?C0079:
; crc_16= ~crc_16;
; SOURCE LINE # 346
XRL crc_16?1767+01H,#0FFH
XRL crc_16?1767,#0FFH
; return(crc_16);
; SOURCE LINE # 347
MOV R6,crc_16?1767
MOV R7,crc_16?1767+01H
; }
; SOURCE LINE # 348
?C0086:
RET
; END OF _CRC16
;
; void Data_Write(void)
RSEG ?PR?Data_Write?SDIO
Data_Write:
USING 0
; SOURCE LINE # 350
; {
; SOURCE LINE # 351
; Write_Byte_SD(Adc_X);
; SOURCE LINE # 352
MOV R7,Adc_X
LCALL _Write_Byte_SD
; Write_Byte_SD(Adc_Y);
; SOURCE LINE # 353
MOV R7,Adc_Y
LJMP _Write_Byte_SD
; END OF Data_Write
; }
;
; void Timing_Sync(void)
RSEG ?PR?Timing_Sync?SDIO
Timing_Sync:
; SOURCE LINE # 356
; {
; SOURCE LINE # 357
?C0088:
; while(SD_CLK_PIN==0);
; SOURCE LINE # 358
JNB SD_CLK_PIN,?C0088
?C0090:
; while(SD_CLK_PIN==1);
; SOURCE LINE # 359
JB SD_CLK_PIN,?C0090
?C0092:
; while(SD_CLK_PIN==0);
; SOURCE LINE # 360
JNB SD_CLK_PIN,?C0092
?C0094:
; while(SD_CLK_PIN==1);
; SOURCE LINE # 361
JB SD_CLK_PIN,?C0094
?C0096:
; while(SD_CLK_PIN==0);
; SOURCE LINE # 362
JNB SD_CLK_PIN,?C0096
?C0098:
; while(SD_CLK_PIN==1);
; SOURCE LINE # 363
JB SD_CLK_PIN,?C0098
; }
; SOURCE LINE # 364
?C0100:
RET
; END OF Timing_Sync
;
; /*void Timing_Sync_CMD53(void)
; {
; while(SD_CLK_PIN==0);
; while(SD_CLK_PIN==1);
; while(SD_CLK_PIN==0);
; while(SD_CLK_PIN==1);
; while(SD_CLK_PIN==0);
; SD_DATA0_PIN=0;
; while(SD_CLK_PIN==1);
; }*/
;
; void Data_Rv_Sync(void)
RSEG ?PR?Data_Rv_Sync?SDIO
Data_Rv_Sync:
; SOURCE LINE # 377
; {
; SOURCE LINE # 378
?C0101:
; while(SD_DATA0_PIN==1);
; SOURCE LINE # 379
JB SD_DATA0_PIN,?C0101
?C0103:
; while(SD_CLK_PIN==0);
; SOURCE LINE # 380
JNB SD_CLK_PIN,?C0103
?C0105:
; while(SD_CLK_PIN==1);
; SOURCE LINE # 381
JB SD_CLK_PIN,?C0105
?C0107:
; while(SD_CLK_PIN==0);
; SOURCE LINE # 382
JNB SD_CLK_PIN,?C0107
; //while(SD_CLK_PIN==1);
; }
; SOURCE LINE # 384
?C0109:
RET
; END OF Data_Rv_Sync
;
; void Data_Wr_Sync(void)
RSEG ?PR?Data_Wr_Sync?SDIO
Data_Wr_Sync:
; SOURCE LINE # 386
; {
; SOURCE LINE # 387
?C0110:
; while(SD_CLK_PIN==0);
; SOURCE LINE # 388
JNB SD_CLK_PIN,?C0110
?C0112:
; while(SD_CLK_PIN==1);
; SOURCE LINE # 389
JB SD_CLK_PIN,?C0112
?C0114:
; while(SD_CLK_PIN==0);
; SOURCE LINE # 390
JNB SD_CLK_PIN,?C0114
?C0116:
; while(SD_CLK_PIN==1);
; SOURCE LINE # 391
JB SD_CLK_PIN,?C0116
?C0118:
; while(SD_CLK_PIN==0);
; SOURCE LINE # 392
JNB SD_CLK_PIN,?C0118
?C0119:
; SD_DATA0_PIN=0;
; SOURCE LINE # 393
CLR SD_DATA0_PIN
?C0120:
; while(SD_CLK_PIN==1);
; SOURCE LINE # 394
JB SD_CLK_PIN,?C0120
; }
; SOURCE LINE # 395
?C0122:
RET
; END OF Data_Wr_Sync
;
; void Slave_Mode_Sel(void)
RSEG ?PR?Slave_Mode_Sel?SDIO
Slave_Mode_Sel:
; SOURCE LINE # 397
; {
; SOURCE LINE # 398
; }
; SOURCE LINE # 399
RET
; END OF Slave_Mode_Sel
;
; void Response_to_CMD0(void)
RSEG ?PR?Response_to_CMD0?SDIO
Response_to_CMD0:
; SOURCE LINE # 401
; {
; SOURCE LINE # 402
; Slave_Mode_Sel();
; SOURCE LINE # 403
LJMP Slave_Mode_Sel
; END OF Response_to_CMD0
; }
;
; void Response_to_CMD3(void) //R6 response
RSEG ?PR?Response_to_CMD3?SDIO
Response_to_CMD3:
USING 0
; SOURCE LINE # 406
; {
; SOURCE LINE # 407
; P2MDOUT=0x02;
; SOURCE LINE # 408
MOV P2MDOUT,#02H
; Buffer_send[0]=0x03; //command index
; SOURCE LINE # 409
MOV Buffer_send,#03H
; Buffer_send[1]=RCA_REG[0];
; SOURCE LINE # 410
MOV Buffer_send+01H,RCA_REG
; Buffer_send[2]=RCA_REG[1];
; SOURCE LINE # 411
MOV Buffer_send+02H,RCA_REG+01H
; Buffer_send[3]=0x00;
; SOURCE LINE # 412
CLR A
MOV Buffer_send+03H,A
; Buffer_send[4]=0x00;
; SOURCE LINE # 413
MOV Buffer_send+04H,A
; Buffer_send[5]=0xeb;
; SOURCE LINE # 414
MOV Buffer_send+05H,#0EBH
; Timing_Sync();
; SOURCE LINE # 415
; Write_Res_SD(Buffer_send[0]);
; SOURCE LINE # 416
; Write_Res_SD(Buffer_send[1]);
; SOURCE LINE # 417
; Write_Res_SD(Buffer_send[2]);
; SOURCE LINE # 418
; Write_Res_SD(Buffer_send[3]); //card status,0 stand for no error
; SOURCE LINE # 419
; Write_Res_SD(Buffer_send[4]);
; SOURCE LINE # 420
; Write_Res_SD(Buffer_send[5]);
; SOURCE LINE # 421
LCALL L?0337
?C0125:
; while(SD_CLK_PIN==0);
; SOURCE LINE # 422
JNB SD_CLK_PIN,?C0125
?C0126:
; SD_CMD_PIN=1;
; SOURCE LINE # 423
SETB SD_CMD_PIN
; SD_CMD_PIN=1;
; SOURCE LINE # 424
SETB SD_CMD_PIN
; P2MDOUT&=~0x02;
; SOURCE LINE # 425
ANL P2MDOUT,#0FDH
; }
; SOURCE LINE # 426
RET
; END OF Response_to_CMD3
;
; void Response_to_CMD5(void) //R4 response
RSEG ?PR?Response_to_CMD5?SDIO
Response_to_CMD5:
USING 0
; SOURCE LINE # 428
; {
; SOURCE LINE # 429
; P2MDOUT=0x02;
; SOURCE LINE # 430
MOV P2MDOUT,#02H
; Buffer_send[0]=0x3f; //command index
; SOURCE LINE # 431
MOV Buffer_send,#03FH
; Buffer_send[1]=0x90; //card status
; SOURCE LINE # 432
MOV Buffer_send+01H,#090H
; Buffer_send[2]=OCR_REG[0];
; SOURCE LINE # 433
MOV Buffer_send+02H,OCR_REG
; Buffer_send[3]=OCR_REG[1]; //ready for data
; SOURCE LINE # 434
MOV Buffer_send+03H,OCR_REG+01H
; Buffer_send[4]=OCR_REG[2];
; SOURCE LINE # 435
MOV Buffer_send+04H,OCR_REG+02H
; Buffer_send[5]=0xff;
; SOURCE LINE # 436
MOV Buffer_send+05H,#0FFH
; Timing_Sync();
; SOURCE LINE # 437
; Write_Res_SD(Buffer_send[0]);
; SOURCE LINE # 438
; Write_Res_SD(Buffer_send[1]);
; SOURCE LINE # 439
; Write_Res_SD(Buffer_send[2]); //0xff
; SOURCE LINE # 440
; Write_Res_SD(Buffer_send[3]); //0xC0
; SOURCE LINE # 441
; Write_Res_SD(Buffer_send[4]); //0xff
; SOURCE LINE # 442
; Write_Res_SD(Buffer_send[5]); //reserved bits
; SOURCE LINE # 443
LCALL L?0337
?C0128:
; while(SD_CLK_PIN==0);
; SOURCE LINE # 444
JNB SD_CLK_PIN,?C0128
?C0129:
; SD_CMD_PIN=1;
; SOURCE LINE # 445
SETB SD_CMD_PIN
; SD_CMD_PIN=1;
; SOURCE LINE # 446
SETB SD_CMD_PIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -