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

📄 main.lss

📁 基於MCU c51/8051 讀寫SD/MMC card 再以USB 傳回電腦的範例程序
💻 LSS
📖 第 1 页 / 共 5 页
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .data         000000aa  00800100  00002848  000028dc  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  1 .text         00002848  00000000  00000000  00000094  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .bss          0000003d  008001aa  008001aa  00002986  2**0
                  ALLOC
  3 .stab         00000414  00000000  00000000  00002988  2**2
                  CONTENTS, READONLY, DEBUGGING
  4 .stabstr      00000071  00000000  00000000  00002d9c  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_aranges 000000c0  00000000  00000000  00002e0d  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_pubnames 00000805  00000000  00000000  00002ecd  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_info   00002563  00000000  00000000  000036d2  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_abbrev 00000950  00000000  00000000  00005c35  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_line   00002a54  00000000  00000000  00006585  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_frame  000005f0  00000000  00000000  00008fdc  2**2
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_str    00000ac1  00000000  00000000  000095cc  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_loc    00000d19  00000000  00000000  0000a08d  2**0
                  CONTENTS, READONLY, DEBUGGING
 13 .debug_ranges 00000018  00000000  00000000  0000ada6  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
       0:	0c 94 4c 00 	jmp	0x98	; 0x98 <__ctors_end>
       4:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
       8:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
       c:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      10:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      14:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      18:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      1c:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      20:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      24:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      28:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      2c:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      30:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      34:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      38:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      3c:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      40:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      44:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      48:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      4c:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      50:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      54:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      58:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      5c:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      60:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      64:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      68:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      6c:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      70:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      74:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      78:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      7c:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      80:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      84:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>
      88:	0c 94 6b 00 	jmp	0xd6	; 0xd6 <__bad_interrupt>

0000008c <edges.1628>:
      8c:	23 23 23 23 3d 23 2b 2b 2b 2b 2d 7c                 ####=#++++-|

00000098 <__ctors_end>:
      98:	11 24       	eor	r1, r1
      9a:	1f be       	out	0x3f, r1	; 63
      9c:	cf ef       	ldi	r28, 0xFF	; 255
      9e:	d0 e1       	ldi	r29, 0x10	; 16
      a0:	de bf       	out	0x3e, r29	; 62
      a2:	cd bf       	out	0x3d, r28	; 61

000000a4 <__do_copy_data>:
      a4:	11 e0       	ldi	r17, 0x01	; 1
      a6:	a0 e0       	ldi	r26, 0x00	; 0
      a8:	b1 e0       	ldi	r27, 0x01	; 1
      aa:	e8 e4       	ldi	r30, 0x48	; 72
      ac:	f8 e2       	ldi	r31, 0x28	; 40
      ae:	00 e0       	ldi	r16, 0x00	; 0
      b0:	0b bf       	out	0x3b, r16	; 59
      b2:	02 c0       	rjmp	.+4      	; 0xb8 <__do_copy_data+0x14>
      b4:	07 90       	elpm	r0, Z+
      b6:	0d 92       	st	X+, r0
      b8:	aa 3a       	cpi	r26, 0xAA	; 170
      ba:	b1 07       	cpc	r27, r17
      bc:	d9 f7       	brne	.-10     	; 0xb4 <__do_copy_data+0x10>

000000be <__do_clear_bss>:
      be:	11 e0       	ldi	r17, 0x01	; 1
      c0:	aa ea       	ldi	r26, 0xAA	; 170
      c2:	b1 e0       	ldi	r27, 0x01	; 1
      c4:	01 c0       	rjmp	.+2      	; 0xc8 <.do_clear_bss_start>

000000c6 <.do_clear_bss_loop>:
      c6:	1d 92       	st	X+, r1

000000c8 <.do_clear_bss_start>:
      c8:	a7 3e       	cpi	r26, 0xE7	; 231
      ca:	b1 07       	cpc	r27, r17
      cc:	e1 f7       	brne	.-8      	; 0xc6 <.do_clear_bss_loop>
      ce:	0e 94 6d 00 	call	0xda	; 0xda <main>
      d2:	0c 94 23 14 	jmp	0x2846	; 0x2846 <_exit>

000000d6 <__bad_interrupt>:
      d6:	0c 94 00 00 	jmp	0	; 0x0 <__vectors>

000000da <main>:

extern unsigned char DISK_CAPACITY[8];

int main()
{
      da:	ef 92       	push	r14
      dc:	ff 92       	push	r15
      de:	0f 93       	push	r16
      e0:	1f 93       	push	r17
      e2:	cf 93       	push	r28
      e4:	df 93       	push	r29
      e6:	cd b7       	in	r28, 0x3d	; 61
      e8:	de b7       	in	r29, 0x3e	; 62
      ea:	24 97       	sbiw	r28, 0x04	; 4
      ec:	0f b6       	in	r0, 0x3f	; 63
      ee:	f8 94       	cli
      f0:	de bf       	out	0x3e, r29	; 62
      f2:	0f be       	out	0x3f, r0	; 63
      f4:	cd bf       	out	0x3d, r28	; 61
	Term_Initialise();
      f6:	0e 94 3c 0e 	call	0x1c78	; 0x1c78 <Term_Initialise>
	
	LED_DDR |= 1<<LED_BIT;
      fa:	13 9a       	sbi	0x02, 3	; 2
	
	LED_OFF();
      fc:	1b 9a       	sbi	0x03, 3	; 3
	
	U8 i;
	uint32_t Cap = 0;
      fe:	19 82       	std	Y+1, r1	; 0x01
     100:	1a 82       	std	Y+2, r1	; 0x02
     102:	1b 82       	std	Y+3, r1	; 0x03
     104:	1c 82       	std	Y+4, r1	; 0x04
	//uint32_t Cap = 62128128;
	U8 retry = 0;

	USB_Delay(0xffff);
     106:	8f ef       	ldi	r24, 0xFF	; 255
     108:	9f ef       	ldi	r25, 0xFF	; 255
     10a:	0e 94 19 06 	call	0xc32	; 0xc32 <USB_Delay>
	
	D12_PORT_INI();
     10e:	0e 94 fe 00 	call	0x1fc	; 0x1fc <D12_PORT_INI>
	
			
	MMC_SD_Init();
     112:	0e 94 7a 0a 	call	0x14f4	; 0x14f4 <MMC_SD_Init>
	
	LED_OFF();
     116:	1b 9a       	sbi	0x03, 3	; 3
     118:	10 e0       	ldi	r17, 0x00	; 0
     11a:	04 c0       	rjmp	.+8      	; 0x124 <main+0x4a>
	
	
	while(MMC_SD_Reset())// retry 100 times
	{
		retry++;
     11c:	1f 5f       	subi	r17, 0xFF	; 255
		if(retry>100)break;
     11e:	15 36       	cpi	r17, 0x65	; 101
     120:	09 f4       	brne	.+2      	; 0x124 <main+0x4a>
     122:	6a c0       	rjmp	.+212    	; 0x1f8 <main+0x11e>
     124:	0e 94 3a 0c 	call	0x1874	; 0x1874 <MMC_SD_Reset>
     128:	88 23       	and	r24, r24
     12a:	c1 f7       	brne	.-16     	; 0x11c <main+0x42>
	}
	
	if(retry<100 )//if success
     12c:	14 36       	cpi	r17, 0x64	; 100
     12e:	08 f0       	brcs	.+2      	; 0x132 <main+0x58>
     130:	63 c0       	rjmp	.+198    	; 0x1f8 <main+0x11e>
	{
		//LED_ON();

		//Read SD Card Capacity
		Cap = (MMC_SD_ReadCapacity()/512) - 1 ;
     132:	0e 94 d3 0a 	call	0x15a6	; 0x15a6 <MMC_SD_ReadCapacity>
     136:	29 e0       	ldi	r18, 0x09	; 9
     138:	96 95       	lsr	r25
     13a:	87 95       	ror	r24
     13c:	77 95       	ror	r23
     13e:	67 95       	ror	r22
     140:	2a 95       	dec	r18
     142:	d1 f7       	brne	.-12     	; 0x138 <main+0x5e>
     144:	61 50       	subi	r22, 0x01	; 1
     146:	70 40       	sbci	r23, 0x00	; 0
     148:	80 40       	sbci	r24, 0x00	; 0
     14a:	90 40       	sbci	r25, 0x00	; 0
     14c:	69 83       	std	Y+1, r22	; 0x01
     14e:	7a 83       	std	Y+2, r23	; 0x02
     150:	8b 83       	std	Y+3, r24	; 0x03
     152:	9c 83       	std	Y+4, r25	; 0x04
		//Cap = (MMC_SD_ReadCapacity()/512)-1;//Capacity is SD card total capacity not sector . so need -1
		DISK_CAPACITY[0] = ((U8 *)(&Cap))[3];//to U8 format
     154:	2c 81       	ldd	r18, Y+4	; 0x04
     156:	20 93 28 01 	sts	0x0128, r18
		DISK_CAPACITY[1] = ((U8 *)(&Cap))[2];
     15a:	2b 81       	ldd	r18, Y+3	; 0x03
     15c:	20 93 29 01 	sts	0x0129, r18
		DISK_CAPACITY[2] = ((U8 *)(&Cap))[1];
     160:	2a 81       	ldd	r18, Y+2	; 0x02
     162:	20 93 2a 01 	sts	0x012A, r18
		DISK_CAPACITY[3] = ((U8 *)(&Cap))[0];
     166:	29 81       	ldd	r18, Y+1	; 0x01
     168:	20 93 2b 01 	sts	0x012B, r18
		
		//if(Cap>0)
		//LED_ON();
		printf("%ld",Cap);
     16c:	9f 93       	push	r25
     16e:	8f 93       	push	r24
     170:	7f 93       	push	r23
     172:	6f 93       	push	r22
     174:	80 e0       	ldi	r24, 0x00	; 0
     176:	91 e0       	ldi	r25, 0x01	; 1
     178:	9f 93       	push	r25
     17a:	8f 93       	push	r24
     17c:	0e 94 8f 0f 	call	0x1f1e	; 0x1f1e <printf>
		
		if(D12_Read_Chip_ID()==0x1210)
     180:	0e 94 22 02 	call	0x444	; 0x444 <D12_Read_Chip_ID>
     184:	2d b7       	in	r18, 0x3d	; 61
     186:	3e b7       	in	r19, 0x3e	; 62
     188:	2a 5f       	subi	r18, 0xFA	; 250
     18a:	3f 4f       	sbci	r19, 0xFF	; 255
     18c:	0f b6       	in	r0, 0x3f	; 63
     18e:	f8 94       	cli
     190:	3e bf       	out	0x3e, r19	; 62
     192:	0f be       	out	0x3f, r0	; 63
     194:	2d bf       	out	0x3d, r18	; 61
     196:	80 51       	subi	r24, 0x10	; 16
     198:	92 41       	sbci	r25, 0x12	; 18
     19a:	71 f5       	brne	.+92     	; 0x1f8 <main+0x11e>
		{
			//Term_PutS("Find Pdiusbd12, chip id = 0x1210");
			
			USB_Init();
     19c:	0e 94 67 08 	call	0x10ce	; 0x10ce <USB_Init>
     1a0:	26 c0       	rjmp	.+76     	; 0x1ee <main+0x114>
			while(1)
			{
				while(!D12_INT) //interrupt
				{
					PORTE |= 0x02;
     1a2:	19 9a       	sbi	0x03, 1	; 3
					i = D12_Read_Interrupt_Register()&0xff;
     1a4:	0e 94 57 02 	call	0x4ae	; 0x4ae <D12_Read_Interrupt_Register>
     1a8:	7c 01       	movw	r14, r24
					UsbIntProc(i);			
     1aa:	08 2f       	mov	r16, r24
     1ac:	11 27       	eor	r17, r17
     1ae:	00 ff       	sbrs	r16, 0
     1b0:	02 c0       	rjmp	.+4      	; 0x1b6 <main+0xdc>
     1b2:	0e 94 42 06 	call	0xc84	; 0xc84 <D12Ep0IntProc>
     1b6:	01 ff       	sbrs	r16, 1
     1b8:	02 c0       	rjmp	.+4      	; 0x1be <main+0xe4>
     1ba:	0e 94 38 06 	call	0xc70	; 0xc70 <D12Ep1IntProc>
     1be:	02 ff       	sbrs	r16, 2
     1c0:	02 c0       	rjmp	.+4      	; 0x1c6 <main+0xec>
     1c2:	0e 94 33 06 	call	0xc66	; 0xc66 <D12Ep2IntProc>
     1c6:	03 ff       	sbrs	r16, 3
     1c8:	02 c0       	rjmp	.+4      	; 0x1ce <main+0xf4>
     1ca:	0e 94 2e 06 	call	0xc5c	; 0xc5c <D12Ep3IntProc>
     1ce:	04 ff       	sbrs	r16, 4
     1d0:	02 c0       	rjmp	.+4      	; 0x1d6 <main+0xfc>
     1d2:	0e 94 fe 07 	call	0xffc	; 0xffc <D12Ep4IntProc>
     1d6:	05 ff       	sbrs	r16, 5
     1d8:	02 c0       	rjmp	.+4      	; 0x1de <main+0x104>
     1da:	0e 94 2a 06 	call	0xc54	; 0xc54 <D12Ep5IntProc>
     1de:	06 ff       	sbrs	r16, 6
     1e0:	02 c0       	rjmp	.+4      	; 0x1e6 <main+0x10c>
     1e2:	0e 94 22 06 	call	0xc44	; 0xc44 <D12BusRstProc>
     1e6:	e7 fe       	sbrs	r14, 7
     1e8:	02 c0       	rjmp	.+4      	; 0x1ee <main+0x114>
     1ea:	0e 94 21 06 	call	0xc42	; 0xc42 <D12SuspChgProc>
     1ee:	80 91 63 00 	lds	r24, 0x0063
     1f2:	80 ff       	sbrs	r24, 0
     1f4:	d6 cf       	rjmp	.-84     	; 0x1a2 <main+0xc8>
     1f6:	fb cf       	rjmp	.-10     	; 0x1ee <main+0x114>
     1f8:	ff cf       	rjmp	.-2      	; 0x1f8 <main+0x11e>

000001fa <D12_Delay>:
#define NOP2() asm("nop");asm("nop")
#define NOP1() asm("nop")

void D12_Delay(U8 n)
{
     1fa:	08 95       	ret

000001fc <D12_PORT_INI>:
	while(n--);
}

void D12_PORT_INI()
{
     1fc:	a5 e6       	ldi	r26, 0x65	; 101
     1fe:	b0 e0       	ldi	r27, 0x00	; 0
     200:	8c 91       	ld	r24, X
     202:	84 60       	ori	r24, 0x04	; 4
     204:	8c 93       	st	X, r24
	D12_CS_PORT |= 1<<D12_CS_BIT;
	D12_CS_DDR |= 1<<D12_CS_BIT;
     206:	e4 e6       	ldi	r30, 0x64	; 100
     208:	f0 e0       	ldi	r31, 0x00	; 0
     20a:	80 81       	ld	r24, Z
     20c:	84 60       	ori	r24, 0x04	; 4
     20e:	80 83       	st	Z, r24

	D12_INT_PORT |= 1<<D12_INT_BIT;
     210:	8c 91       	ld	r24, X
     212:	81 60       	ori	r24, 0x01	; 1
     214:	8c 93       	st	X, r24
	D12_INT_DDR &= ~(1<<D12_INT_BIT);
     216:	80 81       	ld	r24, Z
     218:	8e 7f       	andi	r24, 0xFE	; 254
     21a:	80 83       	st	Z, r24

	D12_WR_PORT |= 1<<D12_WR_BIT;
     21c:	8c 91       	ld	r24, X
     21e:	88 60       	ori	r24, 0x08	; 8
     220:	8c 93       	st	X, r24
	D12_WR_DDR |= 1<<D12_WR_BIT;
     222:	80 81       	ld	r24, Z
     224:	88 60       	ori	r24, 0x08	; 8
     226:	80 83       	st	Z, r24
	
	D12_RD_PORT |= 1<<D12_RD_BIT;
     228:	8c 91       	ld	r24, X
     22a:	80 61       	ori	r24, 0x10	; 16
     22c:	8c 93       	st	X, r24
	D12_RD_DDR |= 1<<D12_RD_BIT;
     22e:	80 81       	ld	r24, Z
     230:	80 61       	ori	r24, 0x10	; 16
     232:	80 83       	st	Z, r24

	D12_A0_PORT |= 1<<D12_A0_BIT;
     234:	8c 91       	ld	r24, X
     236:	82 60       	ori	r24, 0x02	; 2
     238:	8c 93       	st	X, r24
	D12_A0_DDR |= 1<<D12_A0_BIT;
     23a:	80 81       	ld	r24, Z
     23c:	82 60       	ori	r24, 0x02	; 2
     23e:	80 83       	st	Z, r24
     240:	08 95       	ret

00000242 <D12_Select_Endpoint>:
	...

}


U8 D12_Select_Endpoint(U8 Endpoint)
{
	U8 temp;

	NOP4();

	D12_OUTPUT_MODE();
     24a:	9f ef       	ldi	r25, 0xFF	; 255
     24c:	9a bb       	out	0x1a, r25	; 26
	D12_OUTPUT = Endpoint;
     24e:	8b bb       	out	0x1b, r24	; 27
	D12_CMD_WR_L();
     250:	e5 e6       	ldi	r30, 0x65	; 101
     252:	f0 e0       	ldi	r31, 0x00	; 0
     254:	83 e1       	ldi	r24, 0x13	; 19
     256:	80 83       	st	Z, r24
	D12_CMD_WR_H();
     258:	8f e1       	ldi	r24, 0x1F	; 31
     25a:	80 83       	st	Z, r24
	...

	NOP7();
     268:	00 00       	nop

	D12_INPUT_MODE();
     26a:	1a ba       	out	0x1a, r1	; 26
	D12_DAT_RD_L();	
     26c:	89 e0       	ldi	r24, 0x09	; 9
     26e:	80 83       	st	Z, r24
	NOP3();
     270:	00 00       	nop
     272:	00 00       	nop
     274:	00 00       	nop
	temp = D12_INPUT;
     276:	89 b3       	in	r24, 0x19	; 25
	D12_DAT_RD_H();
     278:	9d e1       	ldi	r25, 0x1D	; 29
     27a:	90 83       	st	Z, r25
	...

	NOP4();

	return temp;
}
     284:	99 27       	eor	r25, r25
     286:	08 95       	ret

00000288 <D12_Set_Endpoint_Status>:
	...

void D12_Set_Endpoint_Status(U8 Endpoint,U8 Status)
{
	NOP4();

	D12_OUTPUT_MODE();
     290:	9f ef       	ldi	r25, 0xFF	; 255
     292:	9a bb       	out	0x1a, r25	; 26
	D12_OUTPUT = Endpoint+0x40;
     294:	80 5c       	subi	r24, 0xC0	; 192
     296:	8b bb       	out	0x1b, r24	; 27
	D12_CMD_WR_L();
     298:	e5 e6       	ldi	r30, 0x65	; 101
     29a:	f0 e0       	ldi	r31, 0x00	; 0
     29c:	83 e1       	ldi	r24, 0x13	; 19

⌨️ 快捷键说明

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