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

📄 sdraw.lss

📁 TFT-LCD Atmega128 Source Code
💻 LSS
📖 第 1 页 / 共 5 页
字号:

sdraw.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .data         000001fe  00800100  00000a2c  00000aa0  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  1 .text         00000a2c  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .bss          00000205  008002fe  00000c2a  00000c9e  2**0
                  ALLOC
  3 .debug_aranges 00000080  00000000  00000000  00000c9e  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_pubnames 000001d0  00000000  00000000  00000d1e  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_info   00000b98  00000000  00000000  00000eee  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_abbrev 000004fa  00000000  00000000  00001a86  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_line   00000a7a  00000000  00000000  00001f80  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_frame  000001b0  00000000  00000000  000029fc  2**2
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_str    0000033d  00000000  00000000  00002bac  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_loc    000007aa  00000000  00000000  00002ee9  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_ranges 00000060  00000000  00000000  00003693  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

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

0000008c <__ctors_end>:
  8c:	11 24       	eor	r1, r1
  8e:	1f be       	out	0x3f, r1	; 63
  90:	cf ef       	ldi	r28, 0xFF	; 255
  92:	d0 e1       	ldi	r29, 0x10	; 16
  94:	de bf       	out	0x3e, r29	; 62
  96:	cd bf       	out	0x3d, r28	; 61

00000098 <__do_copy_data>:
  98:	12 e0       	ldi	r17, 0x02	; 2
  9a:	a0 e0       	ldi	r26, 0x00	; 0
  9c:	b1 e0       	ldi	r27, 0x01	; 1
  9e:	ec e2       	ldi	r30, 0x2C	; 44
  a0:	fa e0       	ldi	r31, 0x0A	; 10
  a2:	00 e0       	ldi	r16, 0x00	; 0
  a4:	0b bf       	out	0x3b, r16	; 59
  a6:	02 c0       	rjmp	.+4      	; 0xac <__do_copy_data+0x14>
  a8:	07 90       	elpm	r0, Z+
  aa:	0d 92       	st	X+, r0
  ac:	ae 3f       	cpi	r26, 0xFE	; 254
  ae:	b1 07       	cpc	r27, r17
  b0:	d9 f7       	brne	.-10     	; 0xa8 <__do_copy_data+0x10>

000000b2 <__do_clear_bss>:
  b2:	15 e0       	ldi	r17, 0x05	; 5
  b4:	ae ef       	ldi	r26, 0xFE	; 254
  b6:	b2 e0       	ldi	r27, 0x02	; 2
  b8:	01 c0       	rjmp	.+2      	; 0xbc <.do_clear_bss_start>

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

000000bc <.do_clear_bss_start>:
  bc:	a3 30       	cpi	r26, 0x03	; 3
  be:	b1 07       	cpc	r27, r17
  c0:	e1 f7       	brne	.-8      	; 0xba <.do_clear_bss_loop>
  c2:	0e 94 07 04 	call	0x80e	; 0x80e <main>
  c6:	0c 94 14 05 	jmp	0xa28	; 0xa28 <_exit>

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

000000ce <sdraw_card_detected>:
static uint8_t raw_block[512];
static uint8_t raw_block_written;
static uint32_t raw_block_address;

uint8_t sdraw_card_detected()
{
  ce:	86 b3       	in	r24, 0x16	; 22
  d0:	82 95       	swap	r24
  d2:	86 95       	lsr	r24
  d4:	86 95       	lsr	r24
  d6:	83 70       	andi	r24, 0x03	; 3
  d8:	80 95       	com	r24
	return ((get_pin_cd() == 0x00) ? 1 : 0);
}
  da:	81 70       	andi	r24, 0x01	; 1
  dc:	08 95       	ret

000000de <sdraw_card_wp>:

uint8_t sdraw_card_wp()
{
  de:	86 b3       	in	r24, 0x16	; 22
  e0:	80 95       	com	r24
    return((get_pin_wp() == 0x00) ? 1 : 0);
}
  e2:	88 1f       	adc	r24, r24
  e4:	88 27       	eor	r24, r24
  e6:	88 1f       	adc	r24, r24
  e8:	08 95       	ret

000000ea <sdraw_send_byte>:
    /* send dummy data for receiving some */
    return SPI_recv_byte();
}

void sdraw_send_byte(uint8_t data)
{
  ea:	0e 94 db 03 	call	0x7b6	; 0x7b6 <SPI_send_byte>
	SPI_send_byte(data);
}
  ee:	08 95       	ret

000000f0 <sdraw_recv_byte>:
{
    return((get_pin_wp() == 0x00) ? 1 : 0);
}

uint8_t sdraw_recv_byte()
{
  f0:	0e 94 e0 03 	call	0x7c0	; 0x7c0 <SPI_recv_byte>
    /* send dummy data for receiving some */
    return SPI_recv_byte();
}
  f4:	08 95       	ret

000000f6 <sdraw_send_command_r1>:




uint8_t sdraw_send_command_r1(uint8_t command, uint32_t arg)
{
  f6:	df 92       	push	r13
  f8:	ef 92       	push	r14
  fa:	ff 92       	push	r15
  fc:	0f 93       	push	r16
  fe:	1f 93       	push	r17
 100:	d8 2e       	mov	r13, r24
 102:	7a 01       	movw	r14, r20
 104:	8b 01       	movw	r16, r22
}

uint8_t sdraw_recv_byte()
{
    /* send dummy data for receiving some */
    return SPI_recv_byte();
 106:	0e 94 e0 03 	call	0x7c0	; 0x7c0 <SPI_recv_byte>
}

void sdraw_send_byte(uint8_t data)
{
	SPI_send_byte(data);
 10a:	8d 2d       	mov	r24, r13
 10c:	80 64       	ori	r24, 0x40	; 64
 10e:	0e 94 db 03 	call	0x7b6	; 0x7b6 <SPI_send_byte>
    sdraw_send_byte(0x40 | command);
    sdraw_send_byte((arg >> 24) & 0xFF);
    sdraw_send_byte((arg >> 16) & 0xFF);
    sdraw_send_byte((arg >> 8) & 0xFF);
    sdraw_send_byte((arg >> 0) & 0xFF);
    sdraw_send_byte(command == CMD_GO_IDLE_STATE ? 0x95 : 0xFF);
 112:	81 2f       	mov	r24, r17
 114:	99 27       	eor	r25, r25
 116:	aa 27       	eor	r26, r26
 118:	bb 27       	eor	r27, r27
 11a:	0e 94 db 03 	call	0x7b6	; 0x7b6 <SPI_send_byte>
 11e:	c8 01       	movw	r24, r16
 120:	aa 27       	eor	r26, r26
 122:	bb 27       	eor	r27, r27
 124:	0e 94 db 03 	call	0x7b6	; 0x7b6 <SPI_send_byte>
 128:	bb 27       	eor	r27, r27
 12a:	a1 2f       	mov	r26, r17
 12c:	90 2f       	mov	r25, r16
 12e:	8f 2d       	mov	r24, r15
 130:	0e 94 db 03 	call	0x7b6	; 0x7b6 <SPI_send_byte>
 134:	8e 2d       	mov	r24, r14
 136:	0e 94 db 03 	call	0x7b6	; 0x7b6 <SPI_send_byte>
 13a:	dd 20       	and	r13, r13
 13c:	11 f0       	breq	.+4      	; 0x142 <sdraw_send_command_r1+0x4c>
 13e:	8f ef       	ldi	r24, 0xFF	; 255
 140:	01 c0       	rjmp	.+2      	; 0x144 <sdraw_send_command_r1+0x4e>
 142:	85 e9       	ldi	r24, 0x95	; 149
    return SPI_recv_byte();
}

void sdraw_send_byte(uint8_t data)
{
	SPI_send_byte(data);
 144:	0e 94 db 03 	call	0x7b6	; 0x7b6 <SPI_send_byte>
 148:	10 e0       	ldi	r17, 0x00	; 0
}

uint8_t sdraw_recv_byte()
{
    /* send dummy data for receiving some */
    return SPI_recv_byte();
 14a:	0e 94 e0 03 	call	0x7c0	; 0x7c0 <SPI_recv_byte>
    
    /* receive response */
    for(i = 0; i < 10; ++i)
    {
        response = sdraw_recv_byte();
        if(response != 0xFF)
 14e:	8f 3f       	cpi	r24, 0xFF	; 255
 150:	19 f4       	brne	.+6      	; 0x158 <sdraw_send_command_r1+0x62>
    sdraw_send_byte((arg >> 8) & 0xFF);
    sdraw_send_byte((arg >> 0) & 0xFF);
    sdraw_send_byte(command == CMD_GO_IDLE_STATE ? 0x95 : 0xFF);
    
    /* receive response */
    for(i = 0; i < 10; ++i)
 152:	1f 5f       	subi	r17, 0xFF	; 255
 154:	1a 30       	cpi	r17, 0x0A	; 10
 156:	c9 f7       	brne	.-14     	; 0x14a <sdraw_send_command_r1+0x54>
        if(response != 0xFF)
            break;
    }

    return response;
}
 158:	1f 91       	pop	r17
 15a:	0f 91       	pop	r16
 15c:	ff 90       	pop	r15
 15e:	ef 90       	pop	r14
 160:	df 90       	pop	r13
 162:	08 95       	ret

00000164 <sdraw_get_info>:
    return 1;
}


uint8_t sdraw_get_info(struct sdraw_info* info)
{
 164:	cf 92       	push	r12
 166:	df 92       	push	r13
 168:	ef 92       	push	r14
 16a:	ff 92       	push	r15
 16c:	0f 93       	push	r16
 16e:	1f 93       	push	r17
 170:	cf 93       	push	r28
 172:	df 93       	push	r29
 174:	8c 01       	movw	r16, r24
	uint8_t i, b;
	uint8_t csd_read_bl_len = 0;
    uint8_t csd_c_size_mult = 0;
    uint16_t csd_c_size = 0;

    if(!info || !sdraw_card_detected())
 176:	00 97       	sbiw	r24, 0x00	; 0
 178:	09 f4       	brne	.+2      	; 0x17c <sdraw_get_info+0x18>
 17a:	06 c1       	rjmp	.+524    	; 0x388 <sdraw_get_info+0x224>
static uint8_t raw_block_written;
static uint32_t raw_block_address;

uint8_t sdraw_card_detected()
{
	return ((get_pin_cd() == 0x00) ? 1 : 0);
 17c:	86 b3       	in	r24, 0x16	; 22
	uint8_t i, b;
	uint8_t csd_read_bl_len = 0;
    uint8_t csd_c_size_mult = 0;
    uint16_t csd_c_size = 0;

    if(!info || !sdraw_card_detected())
 17e:	82 95       	swap	r24
 180:	86 95       	lsr	r24
 182:	86 95       	lsr	r24
 184:	83 70       	andi	r24, 0x03	; 3
 186:	80 fd       	sbrc	r24, 0
 188:	ff c0       	rjmp	.+510    	; 0x388 <sdraw_get_info+0x224>
        return 0;

    memset(info, 0, sizeof(*info));
 18a:	89 e1       	ldi	r24, 0x19	; 25
 18c:	f8 01       	movw	r30, r16
 18e:	11 92       	st	Z+, r1
 190:	8a 95       	dec	r24
 192:	e9 f7       	brne	.-6      	; 0x18e <sdraw_get_info+0x2a>

    select_card();
 194:	80 91 62 00 	lds	r24, 0x0062
 198:	8f 77       	andi	r24, 0x7F	; 127
 19a:	80 93 62 00 	sts	0x0062, r24

    /* read cid register */
    if(sdraw_send_command_r1(CMD_SEND_CID, 0))
 19e:	40 e0       	ldi	r20, 0x00	; 0
 1a0:	50 e0       	ldi	r21, 0x00	; 0
 1a2:	60 e0       	ldi	r22, 0x00	; 0
 1a4:	70 e0       	ldi	r23, 0x00	; 0
 1a6:	8a e0       	ldi	r24, 0x0A	; 10
 1a8:	0e 94 7b 00 	call	0xf6	; 0xf6 <sdraw_send_command_r1>
 1ac:	88 23       	and	r24, r24
 1ae:	09 f0       	breq	.+2      	; 0x1b2 <sdraw_get_info+0x4e>
 1b0:	65 c0       	rjmp	.+202    	; 0x27c <sdraw_get_info+0x118>
}

uint8_t sdraw_recv_byte()
{
    /* send dummy data for receiving some */
    return SPI_recv_byte();
 1b2:	0e 94 e0 03 	call	0x7c0	; 0x7c0 <SPI_recv_byte>
    {
        unselect_card();
        return 0;
    }

    while(sdraw_recv_byte() != 0xFE);
 1b6:	8e 3f       	cpi	r24, 0xFE	; 254
 1b8:	e1 f7       	brne	.-8      	; 0x1b2 <sdraw_get_info+0x4e>
 1ba:	d0 2e       	mov	r13, r16
 1bc:	c8 01       	movw	r24, r16
 1be:	ec 01       	movw	r28, r24
 1c0:	e0 e6       	ldi	r30, 0x60	; 96
 1c2:	ee 2e       	mov	r14, r30
 1c4:	f1 2c       	mov	r15, r1
}

uint8_t sdraw_recv_byte()
{
    /* send dummy data for receiving some */
    return SPI_recv_byte();
 1c6:	0e 94 e0 03 	call	0x7c0	; 0x7c0 <SPI_recv_byte>
 1ca:	28 2f       	mov	r18, r24

    for(i = 0; i < 18; ++i)
    {
        b = sdraw_recv_byte();

        switch(i)
 1cc:	ae 01       	movw	r20, r28
 1ce:	4d 19       	sub	r20, r13
 1d0:	48 30       	cpi	r20, 0x08	; 8
 1d2:	28 f4       	brcc	.+10     	; 0x1de <sdraw_get_info+0x7a>
 1d4:	43 30       	cpi	r20, 0x03	; 3
 1d6:	90 f4       	brcc	.+36     	; 0x1fc <sdraw_get_info+0x98>
 1d8:	44 23       	and	r20, r20
 1da:	59 f0       	breq	.+22     	; 0x1f2 <sdraw_get_info+0x8e>
 1dc:	0d c0       	rjmp	.+26     	; 0x1f8 <sdraw_get_info+0x94>
 1de:	4d 30       	cpi	r20, 0x0D	; 13
 1e0:	18 f4       	brcc	.+6      	; 0x1e8 <sdraw_get_info+0x84>
 1e2:	49 30       	cpi	r20, 0x09	; 9
 1e4:	80 f4       	brcc	.+32     	; 0x206 <sdraw_get_info+0xa2>
 1e6:	0c c0       	rjmp	.+24     	; 0x200 <sdraw_get_info+0x9c>
 1e8:	4d 30       	cpi	r20, 0x0D	; 13
 1ea:	31 f1       	breq	.+76     	; 0x238 <sdraw_get_info+0xd4>
 1ec:	4e 30       	cpi	r20, 0x0E	; 14
 1ee:	91 f5       	brne	.+100    	; 0x254 <sdraw_get_info+0xf0>
 1f0:	28 c0       	rjmp	.+80     	; 0x242 <sdraw_get_info+0xde>
        {
            case 0:
                info->manufacturer = b;
 1f2:	f8 01       	movw	r30, r16
 1f4:	20 83       	st	Z, r18
 1f6:	2e c0       	rjmp	.+92     	; 0x254 <sdraw_get_info+0xf0>
                break;
            case 1:
            case 2:
                info->oem[i - 1] = b;
 1f8:	28 83       	st	Y, r18
 1fa:	2c c0       	rjmp	.+88     	; 0x254 <sdraw_get_info+0xf0>
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
                info->product[i - 3] = b;
 1fc:	29 83       	std	Y+1, r18	; 0x01
 1fe:	2a c0       	rjmp	.+84     	; 0x254 <sdraw_get_info+0xf0>
                break;
            case 8:
                info->revision = b;
 200:	f8 01       	movw	r30, r16

⌨️ 快捷键说明

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