📄 sdi.txt
字号:
|L1.2720|
000aa0 e2400001 SUB r0,r0,#1
000aa4 eafffffa B |L1.2708|
;;;320 {
;;;321 *Rx_buffer++=rSDIDAT;
|L1.2728|
000aa8 e3a0245a MOV r2,#0x5a000000
000aac e5923040 LDR r3,[r2,#0x40]
000ab0 e51f270c LDR r2,|L1.940|
000ab4 e5922000 LDR r2,[r2,#0] ; Rx_buffer
000ab8 e4823004 STR r3,[r2],#4
000abc e51f3718 LDR r3,|L1.940|
000ac0 e5832000 STR r2,[r3,#0] ; Rx_buffer
;;;322 rd_cnt++;
000ac4 e59f23e4 LDR r2,|L1.3760|
000ac8 e5922000 LDR r2,[r2,#0] ; rd_cnt
000acc e2822001 ADD r2,r2,#1
000ad0 e59f33d8 LDR r3,|L1.3760|
000ad4 e5832000 STR r2,[r3,#0] ; rd_cnt
;;;323 }
000ad8 eafffff0 B |L1.2720|
;;;324 // Uart_Printf("status1=0x%x\n", status);
;;;325 // status=rSDIFSTA&0x200; //If you do like this, rSDIFSTA register will not be updated., YH 040221
;;;326 rSDIFSTA=rSDIFSTA&0x200; //Clear Rx FIFO Last data Ready, YH 040221
|L1.2780|
000adc e3a0245a MOV r2,#0x5a000000
000ae0 e5922038 LDR r2,[r2,#0x38]
000ae4 e2022f80 AND r2,r2,#0x200
000ae8 e3a0345a MOV r3,#0x5a000000
000aec e5832038 STR r2,[r3,#0x38]
000af0 ea000014 B |L1.2888|
;;;327 // Uart_Printf("rSDIFSTA=0x%x\n", rSDIFSTA);
;;;328 }
;;;329 else if( (status&0x80) == 0x80 ) // Check Half interrupt?
|L1.2804|
000af4 e3110080 TST r1,#0x80
000af8 0a000012 BEQ |L1.2888|
;;;330 {
;;;331 for(i=0;i<8;i++)
000afc e3a00000 MOV r0,#0
|L1.2816|
000b00 e3500008 CMP r0,#8
000b04 2a00000f BCS |L1.2888|
000b08 ea000001 B |L1.2836|
|L1.2828|
000b0c e2800001 ADD r0,r0,#1
000b10 eafffffa B |L1.2816|
;;;332 {
;;;333 *Rx_buffer++=rSDIDAT;
|L1.2836|
000b14 e3a0245a MOV r2,#0x5a000000
000b18 e5923040 LDR r3,[r2,#0x40]
000b1c e51f2778 LDR r2,|L1.940|
000b20 e5922000 LDR r2,[r2,#0] ; Rx_buffer
000b24 e4823004 STR r3,[r2],#4
000b28 e51f3784 LDR r3,|L1.940|
000b2c e5832000 STR r2,[r3,#0] ; Rx_buffer
;;;334 rd_cnt++;
000b30 e59f2378 LDR r2,|L1.3760|
000b34 e5922000 LDR r2,[r2,#0] ; rd_cnt
000b38 e2822001 ADD r2,r2,#1
000b3c e59f336c LDR r3,|L1.3760|
000b40 e5832000 STR r2,[r3,#0] ; rd_cnt
;;;335 }
000b44 eafffff0 B |L1.2828|
;;;336 }
;;;337 // Uart_Printf("rSDIFSTA=0x%x\n", rSDIFSTA); //YH 040221
;;;338
;;;339 ClearPending(BIT_SDI);
|L1.2888|
000b48 e3a02980 MOV r2,#0x200000
000b4c e3a0344a MOV r3,#0x4a000000
000b50 e5832000 STR r2,[r3,#0]
000b54 e3a02980 MOV r2,#0x200000
000b58 e3a0344a MOV r3,#0x4a000000
000b5c e5832010 STR r2,[r3,#0x10]
000b60 e3a0244a MOV r2,#0x4a000000
000b64 e5922010 LDR r2,[r2,#0x10]
;;;340 }
000b68 e8bd000f LDMFD sp!,{r0-r3}
000b6c e25ef004 SUBS pc,lr,#4
ENDP
Rd_Block PROC
;;;364 void Rd_Block(void)
;;;365 {
000b70 e92d4038 STMFD sp!,{r3-r5,lr}
;;;366 U32 mode;
;;;367 int status;
;;;368
;;;369 rd_cnt=0;
000b74 e3a00000 MOV r0,#0
000b78 e59f1330 LDR r1,|L1.3760|
000b7c e5810000 STR r0,[r1,#0] ; rd_cnt
;;;370 Uart_Printf("[Block read test]\n");
000b80 e28f0fcb ADR r0,|L1.3764|
000b84 ebfffffe BL Uart_Printf
;;;371
;;;372 RE0:
000b88 e1a00000 NOP
;;;373 Uart_Printf("0:Polling read 1:Interrupt read 2:DMA read\nSelect the test mode?");
|L1.2956|
000b8c e59f0334 LDR r0,|L1.3784|
000b90 ebfffffe BL Uart_Printf
;;;374 mode=(U32)Uart_GetIntNum();
000b94 ebfffffe BL Uart_GetIntNum
000b98 e1a04000 MOV r4,r0
;;;375
;;;376 Uart_Printf("\n");
000b9c e24f0fac ADR r0,|L1.2292|
000ba0 ebfffffe BL Uart_Printf
;;;377
;;;378 if(mode>2)
000ba4 e3540002 CMP r4,#2
000ba8 9a000000 BLS |L1.2992|
;;;379 goto RE0;
000bac eafffff6 B |L1.2956|
;;;380
;;;381 // rSDICON = rSDICON|(1<<1); // FIFO reset
;;;382 rSDIFSTA=rSDIFSTA|(1<<16); // FIFO reset
|L1.2992|
000bb0 e3a0045a MOV r0,#0x5a000000
000bb4 e5900038 LDR r0,[r0,#0x38]
000bb8 e3800b40 ORR r0,r0,#0x10000
000bbc e3a0145a MOV r1,#0x5a000000
000bc0 e5810038 STR r0,[r1,#0x38]
;;;383
;;;384 if(mode!=2)
000bc4 e3540002 CMP r4,#2
000bc8 0a000008 BEQ |L1.3056|
;;;385 rSDIDCON=(2<<22)|(1<<19)|(1<<17)|(Wide<<16)|(1<<14)|(2<<12)|(block<<0); //YH 040220
000bcc e51f0814 LDR r0,|L1.960|
000bd0 e5900000 LDR r0,[r0,#0] ; block
000bd4 e59f12f0 LDR r1,|L1.3788|
000bd8 e5911000 LDR r1,[r1,#0] ; Wide
000bdc e1800801 ORR r0,r0,r1,LSL #16
000be0 e3800880 ORR r0,r0,#0x800000
000be4 e3800aa6 ORR r0,r0,#0xa6000
000be8 e3a0145a MOV r1,#0x5a000000
000bec e581002c STR r0,[r1,#0x2c]
;;;386 //Word Rx, Rx after cmd, blk, 4bit bus, Rx start, blk num, data start, data transmit mode
;;;387
;;;388 rSDICARG=0x0; // CMD17/18(addr)
|L1.3056|
000bf0 e3a00000 MOV r0,#0
000bf4 e3a0145a MOV r1,#0x5a000000
000bf8 e5810008 STR r0,[r1,#8]
;;;389
;;;390 RERDCMD:
000bfc e1a00000 NOP
;;;391 switch(mode)
|L1.3072|
000c00 e3540000 CMP r4,#0
000c04 0a000004 BEQ |L1.3100|
000c08 e3540001 CMP r4,#1
000c0c 0a00003c BEQ |L1.3332|
000c10 e3540002 CMP r4,#2
000c14 1a0000d0 BNE |L1.3932|
000c18 ea00006b B |L1.3532|
;;;392 {
;;;393 case POL:
;;;394 if(block<2) // SINGLE_READ
|L1.3100|
000c1c e51f0864 LDR r0,|L1.960|
000c20 e5900000 LDR r0,[r0,#0] ; block
000c24 e3500002 CMP r0,#2
000c28 2a000008 BCS |L1.3152|
;;;395 {
;;;396 rSDICCON=(0x1<<9)|(0x1<<8)|0x51; // sht_resp, wait_resp, dat, start, CMD17
000c2c e59f029c LDR r0,|L1.3792|
000c30 e3a0145a MOV r1,#0x5a000000
000c34 e581000c STR r0,[r1,#0xc]
;;;397 if(!Chk_CMDend(17, 1)) //-- Check end of CMD17
000c38 e3a01001 MOV r1,#1
000c3c e3a00011 MOV r0,#0x11
000c40 ebfffffe BL Chk_CMDend
000c44 e3500000 CMP r0,#0
000c48 1a000009 BNE |L1.3188|
;;;398 goto RERDCMD;
000c4c eaffffeb B |L1.3072|
;;;399 }
;;;400 else // MULTI_READ
;;;401 {
;;;402 rSDICCON=(0x1<<9)|(0x1<<8)|0x52; // sht_resp, wait_resp, dat, start, CMD18
|L1.3152|
000c50 e59f027c LDR r0,|L1.3796|
000c54 e3a0145a MOV r1,#0x5a000000
000c58 e581000c STR r0,[r1,#0xc]
;;;403 if(!Chk_CMDend(18, 1)) //-- Check end of CMD18
000c5c e3a01001 MOV r1,#1
000c60 e3a00012 MOV r0,#0x12
000c64 ebfffffe BL Chk_CMDend
000c68 e3500000 CMP r0,#0
000c6c 1a000000 BNE |L1.3188|
;;;404 goto RERDCMD;
000c70 eaffffe2 B |L1.3072|
;;;405 }
;;;406
;;;407 rSDICSTA=0xa00; // Clear cmd_end(with rsp)
|L1.3188|
000c74 e3a00ea0 MOV r0,#0xa00
000c78 e3a0145a MOV r1,#0x5a000000
000c7c e5810010 STR r0,[r1,#0x10]
;;;408
;;;409 while(rd_cnt<128*block) // 512*block bytes
000c80 e1a00000 NOP
|L1.3204|
000c84 e59f0224 LDR r0,|L1.3760|
000c88 e5900000 LDR r0,[r0,#0] ; rd_cnt
000c8c e51f18d4 LDR r1,|L1.960|
000c90 e5911000 LDR r1,[r1,#0] ; block
000c94 e1500381 CMP r0,r1,LSL #7
000c98 2a000018 BCS |L1.3328|
;;;410 {
;;;411 if((rSDIDSTA&0x20)==0x20) // Check timeout
000c9c e3a0045a MOV r0,#0x5a000000
000ca0 e5900034 LDR r0,[r0,#0x34]
000ca4 e3100020 TST r0,#0x20
000ca8 0a000003 BEQ |L1.3260|
;;;412 {
;;;413 rSDIDSTA=(0x1<<0x5); // Clear timeout flag
000cac e3a00020 MOV r0,#0x20
000cb0 e3a0145a MOV r1,#0x5a000000
000cb4 e5810034 STR r0,[r1,#0x34]
;;;414 break;
000cb8 ea000010 B |L1.3328|
;;;415 }
;;;416 status=rSDIFSTA;
|L1.3260|
000cbc e3a0045a MOV r0,#0x5a000000
000cc0 e5905038 LDR r5,[r0,#0x38]
;;;417 if((status&0x1000)==0x1000) // Is Rx data?
000cc4 e3150d40 TST r5,#0x1000
000cc8 0a00000b BEQ |L1.3324|
;;;418 {
;;;419 *Rx_buffer++=rSDIDAT;
000ccc e3a0045a MOV r0,#0x5a000000
000cd0 e5901040 LDR r1,[r0,#0x40]
000cd4 e51f0930 LDR r0,|L1.940|
000cd8 e5900000 LDR r0,[r0,#0] ; Rx_buffer
000cdc e4801004 STR r1,[r0],#4
000ce0 e51f193c LDR r1,|L1.940|
000ce4 e5810000 STR r0,[r1,#0] ; Rx_buffer
;;;420 rd_cnt++;
000ce8 e59f01c0 LDR r0,|L1.3760|
000cec e5900000 LDR r0,[r0,#0] ; rd_cnt
000cf0 e2800001 ADD r0,r0,#1
000cf4 e59f11b4 LDR r1,|L1.3760|
000cf8 e5810000 STR r0,[r1,#0] ; rd_cnt
;;;421 }
;;;422 }
|L1.3324|
000cfc eaffffe0 B |L1.3204|
;;;423 break;
|L1.3328|
000d00 ea000096 B |L1.3936|
;;;424
;;;425 case INT:
;;;426 pISR_SDI=(unsigned)Rd_Int;
|L1.3332|
000d04 e59f01cc LDR r0,|L1.3800|
000d08 e59f11cc LDR r1,|L1.3804|
000d0c e5810f74 STR r0,[r1,#0xf74]
;;;427 rINTMSK = ~(BIT_SDI);
000d10 e3e00980 MVN r0,#0x200000
000d14 e3a0144a MOV r1,#0x4a000000
000d18 e5810008 STR r0,[r1,#8]
;;;428
;;;429 rSDIIMSK=5; // Last & Rx FIFO half int.
000d1c e3a00005 MOV r0,#5
000d20 e3a0145a MOV r1,#0x5a000000
000d24 e581003c STR r0,[r1,#0x3c]
;;;430
;;;431 if(block<2) // SINGLE_READ
000d28 e51f0970 LDR r0,|L1.960|
000d2c e5900000 LDR r0,[r0,#0] ; block
000d30 e3500002 CMP r0,#2
000d34 2a000008 BCS |L1.3420|
;;;432 {
;;;433 rSDICCON=(0x1<<9)|(0x1<<8)|0x51; // sht_resp, wait_resp, dat, start, CMD17
000d38 e59f0190 LDR r0,|L1.3792|
000d3c e3a0145a MOV r1,#0x5a000000
000d40 e581000c STR r0,[r1,#0xc]
;;;434 if(!Chk_CMDend(17, 1)) //-- Check end of CMD17
000d44 e3a01001 MOV r1,#1
000d48 e3a00011 MOV r0,#0x11
000d4c ebfffffe BL Chk_CMDend
000d50 e3500000 CMP r0,#0
000d54 1a000009 BNE |L1.3456|
;;;435 goto RERDCMD;
000d58 eaffffa8 B |L1.3072|
;;;436 }
;;;437 else //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -