📄 mmc.lst
字号:
581 0234 201C mov r0, r4 582 @ sp needed for prologue 583 .LVL39: 584 0236 10BC pop {r4} 585 0238 02BC pop {r1} 586 023a 0847 bx r1 587 .L94: 588 .align 2 589 .L93: 590 023c 00000000 .word mmc_buffer 591 0240 00020000 .word mmc_buffer+512 592 .LFE9: 594 .align 2 595 .global mmcWriteBlock 596 .code 16 597 .thumb_func 599 mmcWriteBlock: 600 .LFB10: 601 .loc 1 259 0 602 0244 10B5 push {r4, lr} 603 .LCFI8: 604 .LVL40: 605 .loc 1 259 0 606 0246 041C mov r4, r0 607 .loc 1 265 0 608 0248 8020 mov r0, #128 609 .LVL41: 610 024a 8000 lsl r0, r0, #2 611 024c FFF7FEFF bl mmcSetBlockLength 612 0250 0028 cmp r0, #0 613 0252 01D0 beq .L96 614 0254 0124 mov r4, #1 615 .LVL42: 616 0256 20E0 b .L98 617 .LVL43: 618 .L96: 619 .loc 1 270 0 620 0258 1820 mov r0, #24 621 025a 211C mov r1, r4 622 025c FF22 mov r2, #255 623 025e FFF7FEFF bl mmcSendCmd 624 .loc 1 275 0 625 0262 0020 mov r0, #0 626 0264 FFF7FEFF bl mmcGetXXResponse 627 0268 0028 cmp r0, #0 628 026a 15D1 bne .L106 629 .loc 1 277 0 630 026c FF20 mov r0, #255 631 026e FFF7FEFF bl spiSendByte 632 .loc 1 279 0 633 0272 FE20 mov r0, #254 634 0274 FFF7FEFF bl spiSendByte 635 0278 0B4C ldr r4, .L107 636 .LVL44: 637 .L101: 638 .loc 1 282 0 639 027a 2078 ldrb r0, [r4] 640 027c FFF7FEFF bl spiSendByte 641 .loc 1 259 0 642 0280 0A4B ldr r3, .L107+4 643 .loc 1 282 0 644 0282 0134 add r4, r4, #1 645 .loc 1 281 0 646 0284 9C42 cmp r4, r3 647 0286 F8D1 bne .L101 648 .loc 1 284 0 649 0288 FF20 mov r0, #255 650 028a FFF7FEFF bl spiSendByte 651 .loc 1 285 0 652 028e FF20 mov r0, #255 653 0290 FFF7FEFF bl spiSendByte 654 .loc 1 288 0 655 0294 FFF7FEFF bl mmcCheckBusy 656 .LVL45: 657 .L106: 658 0298 0224 mov r4, #2 659 .LVL46: 660 .L98: 661 .loc 1 306 0 662 029a FF20 mov r0, #255 663 029c FFF7FEFF bl spiSendByte 664 .loc 1 308 0 665 02a0 201C mov r0, r4 666 @ sp needed for prologue 667 .LVL47: 668 02a2 10BC pop {r4} 669 02a4 02BC pop {r1} 670 02a6 0847 bx r1 671 .L108: 672 .align 2 673 .L107: 674 02a8 00000000 .word mmc_buffer 675 02ac 00020000 .word mmc_buffer+512 676 .LFE10: 678 .align 2 679 .global spiWriteByte 680 .code 16 681 .thumb_func 683 spiWriteByte: 684 .LFB14: 409:mmc.c ****
410:mmc.c **** void spiWriteByte(const unsigned char data)
411:mmc.c **** {
685 .loc 1 411 0 686 .LVL48: 687 @ lr needed for prologue 412:mmc.c **** //while(SSIOST_bit.BUSY != 0); // Wait until the character can be sent
413:mmc.c **** //SSIOINT_bit.TXCMP = 1; // clear interrupt register
414:mmc.c **** //SSIOBUF = data;
415:mmc.c ****
416:mmc.c **** //while((s_pSpi->SPI_SR & AT91C_SPI_RDRF) == 1); // Wait until the character can be sent
417:mmc.c **** //s_pSpi->SPI_RDR = data; // Send the data
418:mmc.c **** }
688 .loc 1 418 0 689 @ sp needed for prologue 690 02b0 7047 bx lr 691 .LFE14: 693 02b2 0000 .align 2 694 .global spiReadByte 695 .code 16 696 .thumb_func 698 spiReadByte: 699 .LFB15: 419:mmc.c ****
420:mmc.c **** unsigned char spiReadByte()
421:mmc.c **** {
700 .loc 1 421 0 701 .LVL49: 422:mmc.c **** //unsigned char spib;
423:mmc.c **** //while(SSIOINT_bit.RXCMP == 0);
424:mmc.c **** //spib = SSIOBUF; // Get the data received
425:mmc.c **** //SSIOINT_bit.RXCMP = 1; //clear interrupt register
426:mmc.c **** //return spib;
427:mmc.c **** return 0;
428:mmc.c **** }
702 .loc 1 428 0 703 02b4 0020 mov r0, #0 704 .loc 1 421 0 705 @ lr needed for prologue 706 .loc 1 428 0 707 @ sp needed for prologue 708 02b6 7047 bx lr 709 .LFE15: 711 .align 2 712 .global mmcReadRegister 713 .code 16 714 .thumb_func 716 mmcReadRegister: 717 .LFB16: 429:mmc.c ****
430:mmc.c **** // Reading the contents of the CSD and CID registers in SPI mode is a simple
431:mmc.c **** // read-block transaction.
432:mmc.c ****
433:mmc.c **** char mmcReadRegister (const char cmd_register, const unsigned char length)
434:mmc.c **** {
718 .loc 1 434 0 719 02b8 70B5 push {r4, r5, r6, lr} 720 .LCFI9: 721 .LVL50: 722 .loc 1 434 0 723 02ba 0906 lsl r1, r1, #24 724 .LVL51: 725 02bc 0006 lsl r0, r0, #24 726 .LVL52: 727 02be 0E0E lsr r6, r1, #24 728 .LVL53: 729 02c0 040E lsr r4, r0, #24 730 .LVL54: 435:mmc.c **** char uc = 0;
436:mmc.c **** char rvalue = MMC_TIMEOUT_ERROR;
437:mmc.c **** // char i = 0;
438:mmc.c ****
439:mmc.c **** if (mmcSetBlockLength (length) == MMC_SUCCESS)
731 .loc 1 439 0 732 02c2 301C mov r0, r6 733 02c4 FFF7FEFF bl mmcSetBlockLength 734 02c8 0028 cmp r0, #0 735 02ca 01D0 beq .L114 736 02cc FF24 mov r4, #255 737 .LVL55: 738 02ce 25E0 b .L116 739 .LVL56: 740 .L114: 440:mmc.c **** {
441:mmc.c **** //CS_LOW ();
442:mmc.c **** // CRC not used: 0xff as last byte
443:mmc.c **** mmcSendCmd(cmd_register, 0x000000, 0xff);
741 .loc 1 443 0 742 02d0 201C mov r0, r4 743 02d2 0021 mov r1, #0 744 02d4 FF22 mov r2, #255 745 02d6 FFF7FEFF bl mmcSendCmd 444:mmc.c ****
445:mmc.c **** // wait for response
446:mmc.c **** // in the R1 format (0x00 is no errors)
447:mmc.c **** if (mmcGetResponse() == 0x00)
746 .loc 1 447 0 747 02da FFF7FEFF bl mmcGetResponse 748 02de 0028 cmp r0, #0 749 02e0 01D0 beq .L117 750 02e2 0224 mov r4, #2 751 .LVL57: 752 02e4 17E0 b .L119 753 .LVL58: 754 .L117: 448:mmc.c **** {
449:mmc.c **** if (mmcGetXXResponse(0xfe)== 0xfe)
755 .loc 1 449 0 756 02e6 FE20 mov r0, #254 757 02e8 FFF7FEFF bl mmcGetXXResponse 758 02ec FE28 cmp r0, #254 759 02ee 0BD1 bne .L120 760 02f0 0025 mov r5, #0 761 02f2 05E0 b .L122 762 .LVL59: 763 .L123: 450:mmc.c **** for (uc = 0; uc < length; uc++)
451:mmc.c **** mmc_buffer[uc] = spiSendByte(0xff);
764 .loc 1 451 0 765 02f4 FF20 mov r0, #255 766 02f6 FFF7FEFF bl spiSendByte 767 02fa 0A4B ldr r3, .L125 768 02fc 1855 strb r0, [r3, r4] 769 02fe 0135 add r5, r5, #1 770 .LVL60: 771 .L122: 772 0300 2B06 lsl r3, r5, #24 773 0302 1C0E lsr r4, r3, #24 774 .LVL61: 775 .loc 1 450 0 776 0304 B442 cmp r4, r6 777 0306 F5D3 bcc .L123 778 .LVL62: 779 .L120: 452:mmc.c **** // get CRC bytes (not really needed by us, but required by MMC)
453:mmc.c **** spiSendByte(0xff);
780 .loc 1 453 0 781 0308 FF20 mov r0, #255 782 030a FFF7FEFF bl spiSendByte 454:mmc.c **** spiSendByte(0xff);
783 .loc 1 454 0 784 030e FF20 mov r0, #255 785 0310 FFF7FEFF bl spiSendByte 786 0314 FF24 mov r4, #255 787 .LVL63: 788 .L119: 455:mmc.c **** }
456:mmc.c **** else
457:mmc.c **** rvalue = MMC_RESPONSE_ERROR;
458:mmc.c **** //CS=HIGH (off)
459:mmc.c **** //CS_HIGH ();
460:mmc.c ****
461:mmc.c **** // Send 8 Clock pulses of delay.
462:mmc.c **** spiSendByte(0xff);
789 .loc 1 462 0 790 0316 FF20 mov r0, #255 791 0318 FFF7FEFF bl spiSendByte 792 .L116: 463:mmc.c **** }
464:mmc.c **** //CS_HIGH ();
465:mmc.c **** return rvalue;
466:mmc.c **** }// mmc_read_register
793 .loc 1 466 0 794 031c 201C mov r0, r4 795 @ sp needed for prologue 796 .LVL64: 797 .LVL65: 798 031e 70BC pop {r4, r5, r6} 799 0320 02BC pop {r1} 800 0322 0847 bx r1 801 .L126: 802 .align 2 803 .L125: 804 0324 00000000 .word mmc_buffer 805 .LFE16: 1024 .Letext0:DEFINED SYMBOLS *ABS*:00000000 mmc.c/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:1 .text:00000000 $t/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:15 .bss:00000000 mmc_buffer .bss:00000000 $d/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:22 .data:00000000 s_pPDC/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:23 .data:00000000 $d/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:28 .data:00000004 s_pPMC/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:34 .data:00000008 s_pPio/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:40 .data:0000000c s_pSpi/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:48 .text:00000000 Delays/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:69 .text:0000000c initSPI_port/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:95 .text:00000024 $d/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:103 .text:00000028 initSPI/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:100 .text:00000028 $t/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:155 .text:00000064 $d/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:169 .text:00000080 spiSendByte/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:166 .text:00000080 $t/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:208 .text:000000a0 $d/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:216 .text:000000a4 mmcSendCmd/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:213 .text:000000a4 $t/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:291 .text:000000f0 mmcGetResponse/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:326 .text:00000110 initMMC/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:380 .text:00000158 mmcGetXXResponse/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:413 .text:00000178 $d/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:421 .text:0000017c mmcCheckBusy/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:418 .text:0000017c $t/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:479 .text:000001bc mmcSetBlockLength/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:510 .text:000001d8 mmcReadBlock/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:590 .text:0000023c $d/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:599 .text:00000244 mmcWriteBlock/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:596 .text:00000244 $t/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:674 .text:000002a8 $d/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:683 .text:000002b0 spiWriteByte/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:680 .text:000002b0 $t/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:698 .text:000002b4 spiReadByte/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:716 .text:000002b8 mmcReadRegister/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccAyjOjk.s:804 .text:00000324 $dNO UNDEFINED SYMBOLS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -