📄 mmc.lst
字号:
A 654 .define "_GetDataResponseMMC"
A 655 .value _GetDataResponseMMC
A 656 .class 2
A 657 .type 76
A 658 .type 0
A 659 .endef
A 660 .begfunc "GetDataResponseMMC",101,"_GetDataResponseMMC"
A 661 .define "dataresponse"
A 662 .class 1
A 663 .value -1
A 664 .type 12
A 665 .type 0
A 666 .endef
00016A 9C01 A 667 LD R9,#1
00016C D6 0000 A 668 CALL __b_frameset0
A 669 ; 102 unsigned char dataresponse;
A 670 ; 103
A 671 ; 104 dataresponse=TransferSPI(0xFF);
A 672 .line 104
00016F 1F70FF A 673 PUSH #255
000172 D6 0000 A 674 CALL _TransferSPI
000175 50E1 A 675 POP R1
000177 89E0FF A 676 LDX -1(RR14),R0
ZiLOG Z8 Encore! Macro Assembler Version 2.45 (06120402) 14-Jan-09 10:50:23 page: 14
PC Object I Line Source mmc.src
A 677 ; 105 dataresponse &= 0x1F;
A 678 .line 105
00017A 880EFF A 679 LDX R0,-1(RR14)
00017D 56E01F A 680 AND R0,#31
000180 89E0FF A 681 LDX -1(RR14),R0
A 682 ; 106
A 683 ; 107 return dataresponse;
A 684 .line 107
000183 880EFF A 685 LDX R0,-1(RR14)
A 686 ; 108 }
A 687 .line 108
000186 D6 0000 A 688 CALL __b_framereset
000189 AF A 689 RET
A 690 .endfunc "GetDataResponseMMC",108,"_GetDataResponseMMC"
A 691 SEGMENT ROM_DATA
A 692
A 693
A 694 ;**************************** _WaitUntilReadyMMC ***************************
A 695 ;Name Addr/Register Size Type
A 696 ;_TransferSPI IMPORT ----- function
A 697 ;BUSY R15-1 0 variable
A 698
A 699
A 700 ; Aggregate Stack Size: -1 (words)
A 701
A 702
A 703 SEGMENT mmc_TEXT
A 704 ; 109
A 705 ; 110 void WaitUntilReadyMMC(void)
A 706 ; 111 //waits until the card is out of busy state
A 707 ; 112 //used after getting the data response token of the card when it enters a busy state
A 708 ; 113 {
00018A A 709 _WaitUntilReadyMMC:
A 710 .define "_WaitUntilReadyMMC"
A 711 .value _WaitUntilReadyMMC
A 712 .class 2
A 713 .type 65
A 714 .type 0
A 715 .endef
A 716 .begfunc "WaitUntilReadyMMC",113,"_WaitUntilReadyMMC"
A 717 .define "BUSY"
A 718 .class 1
A 719 .value -1
A 720 .type 12
A 721 .type 0
00018A 9C01 A 722 LD R9,#1
00018C D6 0000 A 723 CALL __b_frameset0
A 724 .endef
A 725 ; 114 unsigned char BUSY;
A 726 ; 115
A 727 ; 116 do
00018F A 728 _5_L_19:
ZiLOG Z8 Encore! Macro Assembler Version 2.45 (06120402) 14-Jan-09 10:50:23 page: 15
PC Object I Line Source mmc.src
A 729 .line 116
A 730 ; 117 BUSY = TransferSPI(0xFF); //zero value for BUSY indicates card is busy
A 731 .line 117
00018F 1F70FF A 732 PUSH #255
000192 D6 0000 A 733 CALL _TransferSPI
000195 50E1 A 734 POP R1
000197 89E0FF A 735 LDX -1(RR14),R0
A 736 ; 118 while(BUSY==0x00);
A 737 .line 118
00019A 880EFF A 738 LDX R0,-1(RR14)
00019D 4200 A 739 OR R0,R0
00019F 6B EE A 740 JR Z,_5_L_19
A 741 ; 119 }
A 742 .line 119
0001A1 D6 0000 A 743 CALL __b_framereset
0001A4 AF A 744 RET
A 745 .endfunc "WaitUntilReadyMMC",119,"_WaitUntilReadyMMC"
A 746 SEGMENT ROM_DATA
A 747
A 748
A 749 ;**************************** _WriteMMC ***************************
A 750 ;Name Addr/Register Size Type
A 751 ;_DeassertSS IMPORT ----- function
A 752 ;_WaitUntilReadyMMC IMPORT ----- function
A 753 ;_GetDataResponseMMC IMPORT ----- function
A 754 ;_WaitResponseMMC IMPORT ----- function
A 755 ;_CommandMMC IMPORT ----- function
A 756 ;_TransferSPI IMPORT ----- function
A 757 ;_AssertSS IMPORT ----- function
A 758 ;R1 R15-5 0 variable
A 759 ;dataresponse R15-4 0 variable
A 760 ;err R15-3 0 variable
A 761 ;ctr R15-2 1 variable
A 762 ;data R15+8 1 parameter
A 763 ;StartAddress R15+4 2 parameter
A 764
A 765
A 766 ; Aggregate Stack Size: -5 (words)
A 767
A 768
A 769 SEGMENT mmc_TEXT
A 770 ; 120
A 771 ; 121 unsigned char WriteMMC(unsigned long StartAddress, unsigned char* data){
0001A5 A 772 _WriteMMC:
A 773 .define "_WriteMMC"
A 774 .value _WriteMMC
A 775 .class 2
A 776 .type 76
A 777 .type 0
A 778 .endef
A 779 .begfunc "WriteMMC",121,"_WriteMMC"
A 780 .define "StartAddress"
ZiLOG Z8 Encore! Macro Assembler Version 2.45 (06120402) 14-Jan-09 10:50:23 page: 16
PC Object I Line Source mmc.src
A 781 .class 9
A 782 .value 4
A 783 .type 15
A 784 .type 0
A 785 .endef
A 786 .define "data"
A 787 .class 17
A 788 .reg -1
A 789 .type 172
A 790 .type 0
A 791 .endef
A 792 .define "ctr"
A 793 .class 1
A 794 .value -2
A 795 .type 13
A 796 .type 0
A 797 .endef
A 798 .define "err"
A 799 .class 1
A 800 .value -3
A 801 .type 12
A 802 .type 0
A 803 .endef
A 804 .define "dataresponse"
A 805 .class 1
A 806 .value -4
A 807 .type 12
A 808 .type 0
A 809 .endef
A 810 .define "R1"
A 811 .class 1
A 812 .value -5
A 813 .type 12
A 814 .type 0
A 815 .endef
0001A5 9C05 A 816 LD R9,#5
0001A7 D6 0000 A 817 CALL __b_frameset0
A 818 ; 122 //writes data(single block:512 bytes) to the MMC
A 819 ; 123
A 820 ; 124 unsigned char R1,dataresponse,err=0;
A 821 .line 124
0001AA B0E0 A 822 CLR R0
0001AC 89E0FD A 823 LDX -3(RR14),R0
A 824 ; 125 unsigned int ctr;
A 825 ; 126
A 826 ; 127 //start read
A 827 ; 128 AssertSS();
A 828 .line 128
0001AF D6 0000 A 829 CALL _AssertSS
A 830 ; 129 TransferSPI(0xFF);
A 831 .line 129
0001B2 1F70FF A 832 PUSH #255
ZiLOG Z8 Encore! Macro Assembler Version 2.45 (06120402) 14-Jan-09 10:50:23 page: 17
PC Object I Line Source mmc.src
0001B5 D6 0000 A 833 CALL _TransferSPI
0001B8 50E0 A 834 POP R0
A 835 ; 130 CommandMMC(CMMC_SingleBlockWrite,StartAddress);
A 836 .line 130
0001BA 880E04 A 837 LDX R0,4(RR14)
0001BD 881E05 A 838 LDX R1,5(RR14)
0001C0 882E06 A 839 LDX R2,6(RR14)
0001C3 883E07 A 840 LDX R3,7(RR14)
0001C6 70E3 A 841 PUSH R3
0001C8 70E2 A 842 PUSH R2
0001CA 70E1 A 843 PUSH R1
0001CC 70E0 A 844 PUSH R0
0001CE 1F7018 A 845 PUSH #24
0001D1 D6 0000 A 846 CALL _CommandMMC
0001D4 50E0 A 847 POP R0
0001D6 50E0 A 848 POP R0
0001D8 50E0 A 849 POP R0
0001DA 50E0 A 850 POP R0
0001DC 50E0 A 851 POP R0
A 852 ; 131 R1 = WaitResponseMMC();
A 853 .line 131
0001DE D6 009C A 854 CALL _WaitResponseMMC
0001E1 89E0FB A 855 LDX -5(RR14),R0
A 856 ; 132 TransferSPI(0xFF);
A 857 .line 132
0001E4 1F70FF A 858 PUSH #255
0001E7 D6 0000 A 859 CALL _TransferSPI
0001EA 50E0 A 860 POP R0
A 861 ; 133
A 862 ; 134 if(!R1){
A 863 .line 134
0001EC 880EFB A 864 LDX R0,-5(RR14)
0001EF 4200 A 865 OR R0,R0
0001F1 EB 73 A 866 JR NE,_6_L_30
A 867 ; 135 //send data token
A 868 ; 136 TransferSPI(0xFE); //start block token
A 869 .line 136
0001F3 1F70FE A 870 PUSH #254
0001F6 D6 0000 A 871 CALL _TransferSPI
0001F9 50E0 A 872 POP R0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -