⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmcoem.cod

📁 ARM对MMC卡的编程文档
💻 COD
📖 第 1 页 / 共 4 页
字号:
; 602  :         }
; 603  :         
; 604  :         else if ( dstat & END_CMD_RES )

  00050	e3110a02	 tst       r1, #2, 20
  00054	1a00000d	 bne       |$L41522|

; 576  :     while ( dtimer )

  00058	e3520000	 cmp       r2, #0
  0005c	1afffff1	 bne       |$L41216|

; 619  :             }
; 620  : 
; 621  :             
; 622  :             return MMC_NO_ERROR;
; 623  :         }
; 624  :     }
; 625  : 
; 626  : 	
; 627  : 	

; 628  : 	

; 629  : 	WRITE_REGISTER_ULONG(&gSDMMCRegPtr->INT_MASK, 0x3F);

  00060	e2840034	 add       r0, r4, #0x34
  00064	e3a0103f	 mov       r1, #0x3F
  00068	e5801000	 str       r1, [r0]
  0006c		 |$L41518|

; 630  : 
; 631  :     return (MMC_CARD_IS_NOT_RESPONDING);

  0006c	e3a070c9	 mov       r7, #0xC9
  00070		 |$L41209|

; 586  :         {
; 587  :             return MMC_CARD_IS_NOT_RESPONDING;

  00070	e1a00007	 mov       r0, r7

; 632  : }

  00074	e8bd81f0	 ldmia     sp!, {r4 - r8, pc}
  00078		 |$L41519|

; 591  :         {
; 592  :             return (MMC_CMD_CRC_ERROR );

  00078	e3a070ca	 mov       r7, #0xCA

; 586  :         {
; 587  :             return MMC_CARD_IS_NOT_RESPONDING;

  0007c	e1a00007	 mov       r0, r7

; 632  : }

  00080	e8bd81f0	 ldmia     sp!, {r4 - r8, pc}
  00084		 |$L41521|

; 600  :         {
; 601  :             return MMC_DATA_STATUS_CRC_ERROR;

  00084	e3a070cc	 mov       r7, #0xCC

; 586  :         {
; 587  :             return MMC_CARD_IS_NOT_RESPONDING;

  00088	e1a00007	 mov       r0, r7

; 632  : }

  0008c	e8bd81f0	 ldmia     sp!, {r4 - r8, pc}
  00090		 |$L41522|

; 605  :         {
; 606  :             
; 607  :             dtmp = (respLength + 1) & 0xFE;
; 608  :             respLength = dtmp;

  00090	e1a00803	 mov       r0, r3, lsl #16
  00094	e1a01820	 mov       r1, r0, lsr #16
  00098	e2812001	 add       r2, r1, #1
  0009c	e20200fe	 and       r0, r2, #0xFE

; 609  :             i = 0;
; 610  :             while ( i < respLength )

  000a0	e1a01800	 mov       r1, r0, lsl #16
  000a4	e1a05821	 mov       r5, r1, lsr #16
  000a8	e3a07000	 mov       r7, #0
  000ac	e3550000	 cmp       r5, #0
  000b0	9affffee	 bls       |$L41209|
  000b4	e1a02007	 mov       r2, r7
  000b8	ea000000	 b         |$L41229|
  000bc		 |$L41525|
  000bc	e5964000	 ldr       r4, [r6]
  000c0		 |$L41229|

; 611  :             {
; 612  : 				

; 613  : 				dtmp = READ_REGISTER_ULONG(&gSDMMCRegPtr->RES_FIFO);

  000c0	e2840040	 add       r0, r4, #0x40
  000c4	e5904000	 ldr       r4, [r0]

; 614  : 
; 615  :                 respBuff[i] = (UCHAR)(dtmp & 0xFF);
; 616  :                 i++;

  000c8	e2820001	 add       r0, r2, #1
  000cc	e20410ff	 and       r1, r4, #0xFF
  000d0	e7c24008	 strb      r4, [r2, +r8]
  000d4	e1a01800	 mov       r1, r0, lsl #16
  000d8	e1a02821	 mov       r2, r1, lsr #16

; 617  :                 respBuff[i] = (UCHAR)(dtmp >> 8);

  000dc	e1a00802	 mov       r0, r2, lsl #16
  000e0	e1a03820	 mov       r3, r0, lsr #16
  000e4	e1a01424	 mov       r1, r4, lsr #8
  000e8	e20100ff	 and       r0, r1, #0xFF
  000ec	e7c31008	 strb      r1, [r3, +r8]

; 618  :                 i++;

  000f0	e2831001	 add       r1, r3, #1
  000f4	e1a00801	 mov       r0, r1, lsl #16
  000f8	e1a02820	 mov       r2, r0, lsr #16
  000fc	e1a01802	 mov       r1, r2, lsl #16
  00100	e1a02821	 mov       r2, r1, lsr #16
  00104	e1520005	 cmp       r2, r5
  00108	3affffeb	 bcc       |$L41525|

; 586  :         {
; 587  :             return MMC_CARD_IS_NOT_RESPONDING;

  0010c	e1a00007	 mov       r0, r7

; 632  : }

  00110	e8bd81f0	 ldmia     sp!, {r4 - r8, pc}
  00114		 |$L41538|
  00114	00000000	 DCD       |gSDMMCRegPtr|
  00118		 |$M41535|

			 ENDP  ; |getMMCResponseInfo|

	EXPORT	|mmcif_data_swap|

  00000			 AREA	 |.text| { |mmcif_data_swap| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$mmcif_data_swap|, PDATA, SELECTION=5, ASSOC=|.text| { |mmcif_data_swap| } ; comdat associative
|$T41545| DCD	|mmcif_data_swap|
	DCD	0x40000a01
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |mmcif_data_swap| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |mmcif_data_swap| PROC

; 636  : {

  00000	e92d4010	 stmdb     sp!, {r4, lr}
  00004		 |$M41543|
  00004	e1a04000	 mov       r4, r0

; 637  :     UINT16 hi, lo;
; 638  :     hi = ((UINT16) val & 0x00FF) << 8;
; 639  :     lo = ((UINT16) val & 0xFF00) >> 8;
; 640  :     return (lo + hi);

  00008	e1a00804	 mov       r0, r4, lsl #16
  0000c	e1a01820	 mov       r1, r0, lsr #16
  00010	e1a02401	 mov       r2, r1, lsl #8
  00014	e1a00802	 mov       r0, r2, lsl #16
  00018	e1a03820	 mov       r3, r0, lsr #16
  0001c	e1a01804	 mov       r1, r4, lsl #16
  00020	e0830c21	 add       r0, r3, r1, lsr #24

; 641  : }

  00024	e8bd8010	 ldmia     sp!, {r4, pc}
  00028		 |$M41544|

			 ENDP  ; |mmcif_data_swap|

	EXPORT	|MMCTransmit|

  00000			 AREA	 |.text| { |MMCTransmit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$MMCTransmit|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCTransmit| } ; comdat associative
|$T41567| DCD	|MMCTransmit|
	DCD	0x40005401
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |MMCTransmit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |MMCTransmit| PROC

; 666  : {

  00000	e92d43f0	 stmdb     sp!, {r4 - r9, lr}
  00004		 |$M41565|
  00004	e1a05000	 mov       r5, r0
  00008	e1a07001	 mov       r7, r1

; 667  :     UINT16  *dBufPtr;
; 668  :     

; 669  :     

; 670  :     UINT16  dLength;
; 671  :     UINT16  y;
; 672  : 
; 673  :         
; 674  :     dBufPtr = (UINT16 *)dBuf;
; 675  : 	dLength = dataLength;
; 676  : 
; 677  : 	
; 678  : 	while(dLength)

  0000c	e59f8138	 ldr       r8, [pc, #0x138]
  00010	e3a09000	 mov       r9, #0
  00014	ea00003a	 b         |$L41272|
  00018		 |$L41257|
  00018	e5983000	 ldr       r3, [r8]
  0001c	e2831004	 add       r1, r3, #4
  00020		 |$L41261|

; 679  : 	{
; 680  : 		while(!(READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS) & FIFO_BUFFER_EMPTY));  	


  00020	e5910000	 ldr       r0, [r1]
  00024	e3100040	 tst       r0, #0x40
  00028	0afffffc	 beq       |$L41261|

; 681  : 
; 682  : 		if(dLength%512==0)

  0002c	e1a00446	 mov       r0, r6, asr #8
  00030	e0861ba0	 add       r1, r6, r0, lsr #23
  00034	e1a024c1	 mov       r2, r1, asr #9
  00038	e0560482	 subs      r0, r6, r2, lsl #9
  0003c	1a000015	 bne       |$L41263|

; 683  : 		{
; 684  : 			for(y = 0; y<256; y++)

  00040	e1a04009	 mov       r4, r9
  00044		 |$L41264|

; 685  : 			{
; 686  : 				

; 687  : 				WRITE_REGISTER_ULONG(&gSDMMCRegPtr->DATA_FIFO, 
; 688  : 									 mmcif_data_swap(*dBufPtr));

  00044	e0d500b2	 ldrh      r0, [r5], #2
  00048	eb000000	 bl        mmcif_data_swap
  0004c	e1a01800	 mov       r1, r0, lsl #16
  00050	e5980000	 ldr       r0, [r8]
  00054	e1a02821	 mov       r2, r1, lsr #16
  00058	e2801048	 add       r1, r0, #0x48

; 689  : 
; 690  : 				

; 691  : 				dBufPtr++;
; 692  : 				dLength-=2;

  0005c	e1a00807	 mov       r0, r7, lsl #16
  00060	e5812000	 str       r2, [r1]
  00064	e1a01820	 mov       r1, r0, lsr #16
  00068	e2812cff	 add       r2, r1, #0xFF, 24
  0006c	e28200fe	 add       r0, r2, #0xFE
  00070	e1a01800	 mov       r1, r0, lsl #16
  00074	e2840001	 add       r0, r4, #1
  00078	e1a07821	 mov       r7, r1, lsr #16
  0007c	e1a01800	 mov       r1, r0, lsl #16
  00080	e1a02821	 mov       r2, r1, lsr #16
  00084	e1a00802	 mov       r0, r2, lsl #16
  00088	e1a04820	 mov       r4, r0, lsr #16
  0008c	e3540c01	 cmp       r4, #1, 24
  00090	3affffeb	 bcc       |$L41264|

; 693  : 			}
; 694  : 		}
; 695  : 		else

  00094	ea00001a	 b         |$L41272|
  00098		 |$L41263|

; 696  : 		{	
; 697  : 			

; 698  : 			WRITE_REGISTER_ULONG(&gSDMMCRegPtr->BUF_PART_FULL, BUFF_PARTIAL_FULL);

  00098	e283004c	 add       r0, r3, #0x4C
  0009c	e3a01001	 mov       r1, #1
  000a0	e5801000	 str       r1, [r0]

; 699  : 
; 700  : 			for(y = 0; y<dLength/2; y++)

  000a4	e3c60001	 bic       r0, r6, #1
  000a8	e3500000	 cmp       r0, #0
  000ac	9a000014	 bls       |$L41272|
  000b0	e1a04009	 mov       r4, r9
  000b4		 |$L41270|

; 701  : 			{
; 702  : 				

; 703  : 				WRITE_REGISTER_ULONG(&gSDMMCRegPtr->DATA_FIFO, 
; 704  : 									 mmcif_data_swap((UINT16)*dBufPtr));

  000b4	e0d500b2	 ldrh      r0, [r5], #2
  000b8	eb000000	 bl        mmcif_data_swap
  000bc	e1a01800	 mov       r1, r0, lsl #16
  000c0	e5980000	 ldr       r0, [r8]
  000c4	e1a02821	 mov       r2, r1, lsr #16
  000c8	e2801048	 add       r1, r0, #0x48

; 705  : 
; 706  : 			

; 707  : 				dBufPtr++;
; 708  : 				dLength-=2;

  000cc	e2860cff	 add       r0, r6, #0xFF, 24
  000d0	e5812000	 str       r2, [r1]
  000d4	e28010fe	 add       r1, r0, #0xFE
  000d8	e2840001	 add       r0, r4, #1
  000dc	e1a02801	 mov       r2, r1, lsl #16
  000e0	e1a01800	 mov       r1, r0, lsl #16
  000e4	e1a07822	 mov       r7, r2, lsr #16
  000e8	e1a02821	 mov       r2, r1, lsr #16
  000ec	e1a00807	 mov       r0, r7, lsl #16
  000f0	e1a01802	 mov       r1, r2, lsl #16
  000f4	e1a06820	 mov       r6, r0, lsr #16
  000f8	e1a04821	 mov       r4, r1, lsr #16
  000fc	e15400a6	 cmp       r4, r6, lsr #1
  00100	3affffeb	 bcc       |$L41270|
  00104		 |$L41272|

; 667  :     UINT16  *dBufPtr;
; 668  :     

; 669  :     

; 670  :     UINT16  dLength;
; 671  :     UINT16  y;
; 672  : 
; 673  :         
; 674  :     dBufPtr = (UINT16 *)dBuf;
; 675  : 	dLength = dataLength;
; 676  : 
; 677  : 	
; 678  : 	while(dLength)

  00104	e1a00807	 mov       r0, r7, lsl #16
  00108	e1b06820	 movs      r6, r0, lsr #16
  0010c	1affffc1	 bne       |$L41257|

; 709  : 			}
; 710  : 
; 711  : 		}
; 712  : 	}
; 713  : 
; 714  : 
; 715  : 	startMMCClock();

  00110	eb000000	 bl        startMMCClock
  00114	e5983000	 ldr       r3, [r8]
  00118	e2831004	 add       r1, r3, #4
  0011c		 |$L41277|

; 716  : 		
; 717  : 	

; 718  : 	

; 719  : 	while(!(READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS) & MMCI_DATA_TRAN_DONE));

  0011c	e5910000	 ldr       r0, [r1]
  00120	e3100b02	 tst       r0, #2, 22
  00124	0afffffc	 beq       |$L41277|

; 720  : 
; 721  : 	mmc_nop_deselect();

  00128	eb000000	 bl        mmc_nop_deselect
  0012c	e5983000	 ldr       r3, [r8]
  00130	e2831040	 add       r1, r3, #0x40
  00134		 |$L41281|

; 722  : 
; 723  : 	

; 724  : 	while(!(READ_REGISTER_ULONG(&gSDMMCRegPtr->RES_FIFO) & MMCI_PRG_DONE));	

  00134	e5910000	 ldr       r0, [r1]
  00138	e3100a01	 tst       r0, #1, 20
  0013c	0afffffc	 beq       |$L41281|

; 725  : 
; 726  : 	stopMMCClock();

  00140	eb000000	 bl        stopMMCClock

; 727  : 	return MMC_NO_ERROR;

  00144	e1a00009	 mov       r0, r9

; 728  : }

  00148	e8bd83f0	 ldmia     sp!, {r4 - r9, pc}
  0014c		 |$L41569|
  0014c	00000000	 DCD       |gSDMMCRegPtr|
  00150		 |$M41566|

			 ENDP  ; |MMCTransmit|


  00000			 AREA	 |.text| { |mmc_nop_deselect| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$mmc_nop_deselect|, PDATA, SELECTION=5, ASSOC=|.text| { |mmc_nop_deselect| } ; comdat associative
|$T41577| DCD	|mmc_nop_deselect|
	DCD	0x40001d01
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |mmc_nop_deselect| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |mmc_nop_deselect| PROC

; 506  : {

  00000	e92d4010	 stmdb     sp!, {r4, lr}
  00004		 |$M41575|

; 507  :     mmc_status_type cstatus;
; 508  :     
; 509  :     UINT32 *response;
; 510  :     INT32 index, resp_size;
; 511  :     stopMMCClock ();

  00004	eb000000	 bl        stopMMCClock

; 512  : 
; 513  :     

; 514  :     

; 515  :     

; 516  : 	WRITE_REGISTER_ULONG(&gSDMMCRegPtr->CMD, SELECT_DESELECT_CARD);

  00008	e59f4060	 ldr       r4, [pc, #0x60]
  0000c	e3a02007	 mov       r2, #7
  00010	e5940000	 ldr       r0, [r4]
  00014	e2801038	 add       r1, r0, #0x38
  00018	e5812000	 str       r2, [r1]

; 517  : 
; 518  :     

; 519  : 	WRITE_REGISTER_ULONG(&gSDMMCRegPtr->ARGUMENT, MMCI_ARGUMENT_RESET);

  0001c	e3a02000	 mov       r2, #0
  00020	e5940000	 ldr       r0, [r4]
  00024	e280103c	 add       r1, r0, #0x3C
  00028	e5812000	 str       r2, [r1]

; 520  : 
; 521  :     

; 522  :     

; 523  : 	WRITE_REGISTER_ULONG(&gSDMMCRegPtr->CMD_DATA_CONT, R1);

  0002c	e3a02001	 mov       r2, #1
  00030	e5940000	 ldr       r0, [r4]
  00034	e2801014	 add       r1, r0, #0x14
  00038	e5812000	 str       r2, [r1]

; 524  : 
; 525  :     

; 526  :     startMMCClock ();

  0003c	eb000000	 bl        startMMCClock
  00040	e5943000	 ldr       r3, [r4]
  00044	e2831004	 add       r1, r3, #4
  00048		 |$L41197|

; 527  :     
; 528  :     response = (UINT32 *) (&cstatus);
; 529  :     resp_size = sizeof(cstatus);
; 530  :     		 
; 531  :     while ((READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS) & MMC_STATUS_END_COMMAND_RESPONSE) == 0)

  00048	e5910000	 ldr       r0, [r1]
  0004c	e3100a02	 tst       r0, #2, 20
  00050	0afffffc	 beq       |$L41197|
  00054	e2831040	 add       r1, r3, #0x40

; 532  : 		;
; 533  : 
; 534  :     

; 535  :     

; 536  :     for (index = 0; index < (resp_size / 2); index++)

  00058	e3a02004	 mov       r2, #4
  0005c		 |$L41199|
  0005c	e2422001	 sub       r2, r2, #1

; 537  :     {
; 538  :         

; 539  : 		

; 540  : 		READ_REGISTER_ULONG(&gSDMMCRegPtr->RES_FIFO);

  00060	e5910000	 ldr       r0, [r1]
  00064	e3520000	 cmp       r2, #0
  00068	8afffffb	 bhi       |$L41199|

; 541  : 
; 542  :     }
; 543  : }

  0006c	e8bd8010	 ldmia     sp!, {r4, pc}
  00070		 |$L41579|

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -