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

📄 sdraw.lss

📁 TFT-LCD Atmega128 Source Code
💻 LSS
📖 第 1 页 / 共 5 页
字号:
 202:	22 87       	std	Z+10, r18	; 0x0a
 204:	27 c0       	rjmp	.+78     	; 0x254 <sdraw_get_info+0xf0>
                break;
            case 9:
            case 10:
            case 11:
            case 12:
                info->serial |= (uint32_t) b << ((12 - i) * 8);
 206:	30 e0       	ldi	r19, 0x00	; 0
 208:	40 e0       	ldi	r20, 0x00	; 0
 20a:	50 e0       	ldi	r21, 0x00	; 0
 20c:	0e 2c       	mov	r0, r14
 20e:	04 c0       	rjmp	.+8      	; 0x218 <sdraw_get_info+0xb4>
 210:	22 0f       	add	r18, r18
 212:	33 1f       	adc	r19, r19
 214:	44 1f       	adc	r20, r20
 216:	55 1f       	adc	r21, r21
 218:	0a 94       	dec	r0
 21a:	d2 f7       	brpl	.-12     	; 0x210 <sdraw_get_info+0xac>
 21c:	f8 01       	movw	r30, r16
 21e:	83 85       	ldd	r24, Z+11	; 0x0b
 220:	94 85       	ldd	r25, Z+12	; 0x0c
 222:	a5 85       	ldd	r26, Z+13	; 0x0d
 224:	b6 85       	ldd	r27, Z+14	; 0x0e
 226:	82 2b       	or	r24, r18
 228:	93 2b       	or	r25, r19
 22a:	a4 2b       	or	r26, r20
 22c:	b5 2b       	or	r27, r21
 22e:	83 87       	std	Z+11, r24	; 0x0b
 230:	94 87       	std	Z+12, r25	; 0x0c
 232:	a5 87       	std	Z+13, r26	; 0x0d
 234:	b6 87       	std	Z+14, r27	; 0x0e
 236:	0e c0       	rjmp	.+28     	; 0x254 <sdraw_get_info+0xf0>
                break;
            case 13:
                info->manufacturing_year = b << 4;
 238:	22 95       	swap	r18
 23a:	20 7f       	andi	r18, 0xF0	; 240
 23c:	f8 01       	movw	r30, r16
 23e:	27 87       	std	Z+15, r18	; 0x0f
 240:	09 c0       	rjmp	.+18     	; 0x254 <sdraw_get_info+0xf0>
                break;
            case 14:
                info->manufacturing_year |= b >> 4;
 242:	92 2f       	mov	r25, r18
 244:	92 95       	swap	r25
 246:	9f 70       	andi	r25, 0x0F	; 15
 248:	f8 01       	movw	r30, r16
 24a:	87 85       	ldd	r24, Z+15	; 0x0f
 24c:	89 2b       	or	r24, r25
 24e:	87 87       	std	Z+15, r24	; 0x0f
                info->manufacturing_month = b & 0x0f;
 250:	2f 70       	andi	r18, 0x0F	; 15
 252:	20 8b       	std	Z+16, r18	; 0x10
 254:	21 96       	adiw	r28, 0x01	; 1
 256:	48 ef       	ldi	r20, 0xF8	; 248
 258:	5f ef       	ldi	r21, 0xFF	; 255
 25a:	e4 0e       	add	r14, r20
 25c:	f5 1e       	adc	r15, r21
        return 0;
    }

    while(sdraw_recv_byte() != 0xFE);

    for(i = 0; i < 18; ++i)
 25e:	50 ed       	ldi	r21, 0xD0	; 208
 260:	e5 16       	cp	r14, r21
 262:	5f ef       	ldi	r21, 0xFF	; 255
 264:	f5 06       	cpc	r15, r21
 266:	09 f0       	breq	.+2      	; 0x26a <sdraw_get_info+0x106>
 268:	ae cf       	rjmp	.-164    	; 0x1c6 <sdraw_get_info+0x62>
                break;
        }
    }

    /* read csd register */
    if(sdraw_send_command_r1(CMD_SEND_CSD, 0))
 26a:	40 e0       	ldi	r20, 0x00	; 0
 26c:	50 e0       	ldi	r21, 0x00	; 0
 26e:	60 e0       	ldi	r22, 0x00	; 0
 270:	70 e0       	ldi	r23, 0x00	; 0
 272:	89 e0       	ldi	r24, 0x09	; 9
 274:	0e 94 7b 00 	call	0xf6	; 0xf6 <sdraw_send_command_r1>
 278:	88 23       	and	r24, r24
 27a:	31 f0       	breq	.+12     	; 0x288 <sdraw_get_info+0x124>
    {
        unselect_card();
 27c:	80 91 62 00 	lds	r24, 0x0062
 280:	80 68       	ori	r24, 0x80	; 128
 282:	80 93 62 00 	sts	0x0062, r24
 286:	80 c0       	rjmp	.+256    	; 0x388 <sdraw_get_info+0x224>
}

uint8_t sdraw_recv_byte()
{
    /* send dummy data for receiving some */
    return SPI_recv_byte();
 288:	0e 94 e0 03 	call	0x7c0	; 0x7c0 <SPI_recv_byte>
    {
        unselect_card();
        return 0;
    }
  
    while(sdraw_recv_byte() != 0xfe);
 28c:	8e 3f       	cpi	r24, 0xFE	; 254
 28e:	e1 f7       	brne	.-8      	; 0x288 <sdraw_get_info+0x124>
 290:	ff 24       	eor	r15, r15
 292:	cc 24       	eor	r12, r12
 294:	ee 24       	eor	r14, r14
 296:	c0 e0       	ldi	r28, 0x00	; 0
 298:	d0 e0       	ldi	r29, 0x00	; 0
                if(b & 0x40)
                    info->flag_copy = 1;
                if(b & 0x20)
                    info->flag_write_protect = 1;
                if(b & 0x10)
                    info->flag_write_protect_temp = 1;
 29a:	dd 24       	eor	r13, r13
 29c:	d3 94       	inc	r13
}

uint8_t sdraw_recv_byte()
{
    /* send dummy data for receiving some */
    return SPI_recv_byte();
 29e:	0e 94 e0 03 	call	0x7c0	; 0x7c0 <SPI_recv_byte>
  
    for(i = 0; i < 18; ++i)
    {
        b = sdraw_recv_byte();

        switch(i)
 2a2:	98 e0       	ldi	r25, 0x08	; 8
 2a4:	f9 16       	cp	r15, r25
 2a6:	41 f1       	breq	.+80     	; 0x2f8 <sdraw_get_info+0x194>
 2a8:	9f 15       	cp	r25, r15
 2aa:	50 f0       	brcs	.+20     	; 0x2c0 <sdraw_get_info+0x15c>
 2ac:	e6 e0       	ldi	r30, 0x06	; 6
 2ae:	fe 16       	cp	r15, r30
 2b0:	a9 f0       	breq	.+42     	; 0x2dc <sdraw_get_info+0x178>
 2b2:	ef 15       	cp	r30, r15
 2b4:	c8 f0       	brcs	.+50     	; 0x2e8 <sdraw_get_info+0x184>
 2b6:	f5 e0       	ldi	r31, 0x05	; 5
 2b8:	ff 16       	cp	r15, r31
 2ba:	09 f0       	breq	.+2      	; 0x2be <sdraw_get_info+0x15a>
 2bc:	59 c0       	rjmp	.+178    	; 0x370 <sdraw_get_info+0x20c>
 2be:	0a c0       	rjmp	.+20     	; 0x2d4 <sdraw_get_info+0x170>
 2c0:	4a e0       	ldi	r20, 0x0A	; 10
 2c2:	f4 16       	cp	r15, r20
 2c4:	39 f1       	breq	.+78     	; 0x314 <sdraw_get_info+0x1b0>
 2c6:	f4 16       	cp	r15, r20
 2c8:	00 f1       	brcs	.+64     	; 0x30a <sdraw_get_info+0x1a6>
 2ca:	5e e0       	ldi	r21, 0x0E	; 14
 2cc:	f5 16       	cp	r15, r21
 2ce:	09 f0       	breq	.+2      	; 0x2d2 <sdraw_get_info+0x16e>
 2d0:	4f c0       	rjmp	.+158    	; 0x370 <sdraw_get_info+0x20c>
 2d2:	39 c0       	rjmp	.+114    	; 0x346 <sdraw_get_info+0x1e2>
        {
            case 5:
                csd_read_bl_len = b & 0x0f;
 2d4:	7f e0       	ldi	r23, 0x0F	; 15
 2d6:	c7 2e       	mov	r12, r23
 2d8:	c8 22       	and	r12, r24
 2da:	4a c0       	rjmp	.+148    	; 0x370 <sdraw_get_info+0x20c>
                break;
            case 6:
                csd_c_size = (uint16_t) (b & 0x03) << 8;
 2dc:	90 e0       	ldi	r25, 0x00	; 0
 2de:	83 70       	andi	r24, 0x03	; 3
 2e0:	90 70       	andi	r25, 0x00	; 0
 2e2:	d8 2f       	mov	r29, r24
 2e4:	cc 27       	eor	r28, r28
 2e6:	44 c0       	rjmp	.+136    	; 0x370 <sdraw_get_info+0x20c>
                break;
            case 7:
                csd_c_size |= b;
 2e8:	90 e0       	ldi	r25, 0x00	; 0
 2ea:	c8 2b       	or	r28, r24
 2ec:	d9 2b       	or	r29, r25
                csd_c_size <<= 2;
 2ee:	cc 0f       	add	r28, r28
 2f0:	dd 1f       	adc	r29, r29
 2f2:	cc 0f       	add	r28, r28
 2f4:	dd 1f       	adc	r29, r29
 2f6:	3c c0       	rjmp	.+120    	; 0x370 <sdraw_get_info+0x20c>
                break;
            case 8:
                csd_c_size |= b >> 6;
 2f8:	82 95       	swap	r24
 2fa:	86 95       	lsr	r24
 2fc:	86 95       	lsr	r24
 2fe:	83 70       	andi	r24, 0x03	; 3
 300:	90 e0       	ldi	r25, 0x00	; 0
 302:	c8 2b       	or	r28, r24
 304:	d9 2b       	or	r29, r25
                ++csd_c_size;
 306:	21 96       	adiw	r28, 0x01	; 1
 308:	33 c0       	rjmp	.+102    	; 0x370 <sdraw_get_info+0x20c>
                break;
            case 9:
                csd_c_size_mult = (b & 0x03) << 1;
 30a:	43 e0       	ldi	r20, 0x03	; 3
 30c:	e4 2e       	mov	r14, r20
 30e:	e8 22       	and	r14, r24
 310:	ee 0c       	add	r14, r14
 312:	2e c0       	rjmp	.+92     	; 0x370 <sdraw_get_info+0x20c>
                break;
            case 10:
                csd_c_size_mult |= b >> 7;
 314:	88 1f       	adc	r24, r24
 316:	88 27       	eor	r24, r24
 318:	88 1f       	adc	r24, r24
 31a:	e8 2a       	or	r14, r24
                info->capacity = (uint32_t) csd_c_size << (csd_c_size_mult + csd_read_bl_len + 2);
 31c:	9e 01       	movw	r18, r28
 31e:	40 e0       	ldi	r20, 0x00	; 0
 320:	50 e0       	ldi	r21, 0x00	; 0
 322:	8c 2d       	mov	r24, r12
 324:	90 e0       	ldi	r25, 0x00	; 0
 326:	02 96       	adiw	r24, 0x02	; 2
 328:	8e 0d       	add	r24, r14
 32a:	91 1d       	adc	r25, r1
 32c:	04 c0       	rjmp	.+8      	; 0x336 <sdraw_get_info+0x1d2>
 32e:	22 0f       	add	r18, r18
 330:	33 1f       	adc	r19, r19
 332:	44 1f       	adc	r20, r20
 334:	55 1f       	adc	r21, r21
 336:	8a 95       	dec	r24
 338:	d2 f7       	brpl	.-12     	; 0x32e <sdraw_get_info+0x1ca>
 33a:	f8 01       	movw	r30, r16
 33c:	21 8b       	std	Z+17, r18	; 0x11
 33e:	32 8b       	std	Z+18, r19	; 0x12
 340:	43 8b       	std	Z+19, r20	; 0x13
 342:	54 8b       	std	Z+20, r21	; 0x14
 344:	15 c0       	rjmp	.+42     	; 0x370 <sdraw_get_info+0x20c>
                break;
            case 14:
                if(b & 0x40)
 346:	90 e0       	ldi	r25, 0x00	; 0
 348:	86 ff       	sbrs	r24, 6
 34a:	02 c0       	rjmp	.+4      	; 0x350 <sdraw_get_info+0x1ec>
                    info->flag_copy = 1;
 34c:	f8 01       	movw	r30, r16
 34e:	d5 8a       	std	Z+21, r13	; 0x15
                if(b & 0x20)
 350:	85 ff       	sbrs	r24, 5
 352:	02 c0       	rjmp	.+4      	; 0x358 <sdraw_get_info+0x1f4>
                    info->flag_write_protect = 1;
 354:	f8 01       	movw	r30, r16
 356:	d6 8a       	std	Z+22, r13	; 0x16
                if(b & 0x10)
 358:	84 ff       	sbrs	r24, 4
 35a:	02 c0       	rjmp	.+4      	; 0x360 <sdraw_get_info+0x1fc>
                    info->flag_write_protect_temp = 1;
 35c:	f8 01       	movw	r30, r16
 35e:	d7 8a       	std	Z+23, r13	; 0x17
                info->format = (b & 0x0c) >> 2;
 360:	8c 70       	andi	r24, 0x0C	; 12
 362:	90 70       	andi	r25, 0x00	; 0
 364:	95 95       	asr	r25
 366:	87 95       	ror	r24
 368:	95 95       	asr	r25
 36a:	87 95       	ror	r24
 36c:	f8 01       	movw	r30, r16
 36e:	80 8f       	std	Z+24, r24	; 0x18
        return 0;
    }
  
    while(sdraw_recv_byte() != 0xfe);
  
    for(i = 0; i < 18; ++i)
 370:	f3 94       	inc	r15
 372:	f2 e1       	ldi	r31, 0x12	; 18
 374:	ff 16       	cp	r15, r31
 376:	09 f0       	breq	.+2      	; 0x37a <sdraw_get_info+0x216>
 378:	92 cf       	rjmp	.-220    	; 0x29e <sdraw_get_info+0x13a>
                info->format = (b & 0x0c) >> 2;
                break;
        }
    }

    unselect_card();
 37a:	80 91 62 00 	lds	r24, 0x0062
 37e:	80 68       	ori	r24, 0x80	; 128
 380:	80 93 62 00 	sts	0x0062, r24
 384:	81 e0       	ldi	r24, 0x01	; 1
 386:	01 c0       	rjmp	.+2      	; 0x38a <sdraw_get_info+0x226>

    return 1;
 388:	80 e0       	ldi	r24, 0x00	; 0
}
 38a:	df 91       	pop	r29
 38c:	cf 91       	pop	r28
 38e:	1f 91       	pop	r17
 390:	0f 91       	pop	r16
 392:	ff 90       	pop	r15
 394:	ef 90       	pop	r14
 396:	df 90       	pop	r13
 398:	cf 90       	pop	r12
 39a:	08 95       	ret

0000039c <sdraw_init>:

    return 1;
}

uint8_t sdraw_init()
{
 39c:	1f 93       	push	r17
 39e:	cf 93       	push	r28
 3a0:	df 93       	push	r29
	uint8_t i;
	uint16_t j;
	uint8_t response;

    /* enable inputs for reading card status */
    configure_pin_cd();
 3a2:	be 98       	cbi	0x17, 6	; 23
    configure_pin_wp();
 3a4:	bf 98       	cbi	0x17, 7	; 23

    /* enable outputs for MOSI, SCK, SS, input for MISO */
    configure_pin_mosi();
 3a6:	ba 9a       	sbi	0x17, 2	; 23
    configure_pin_sck();
 3a8:	b9 9a       	sbi	0x17, 1	; 23
    configure_pin_ss();
 3aa:	80 91 61 00 	lds	r24, 0x0061
 3ae:	80 68       	ori	r24, 0x80	; 128
 3b0:	80 93 61 00 	sts	0x0061, r24
    configure_pin_miso();
 3b4:	bb 9a       	sbi	0x17, 3	; 23

    unselect_card();
 3b6:	80 91 62 00 	lds	r24, 0x0062
 3ba:	80 68       	ori	r24, 0x80	; 128
 3bc:	80 93 62 00 	sts	0x0062, r24
static uint8_t raw_block_written;
static uint32_t raw_block_address;

uint8_t sdraw_card_detected()
{
	return ((get_pin_cd() == 0x00) ? 1 : 0);
 3c0:	86 b3       	in	r24, 0x16	; 22

    /* initialize SPI with lowest frequency; max. 400kHz during identification mode of card */
 //	SPI_init();

    /* initialization procedure */
    if(!sdraw_card_detected())
 3c2:	82 95       	swap	r24
 3c4:	86 95       	lsr	r24
 3c6:	86 95       	lsr	r24
 3c8:	83 70       	andi	r24, 0x03	; 3
 3ca:	80 ff       	sbrs	r24, 0
 3cc:	03 c0       	rjmp	.+6      	; 0x3d4 <sdraw_init+0x38>
	{	UART_puts("ERROR : CARD NOT FOUND\n");
 3ce:	80 e0       	ldi	r24, 0x00	; 0
 3d0:	91 e0       	ldi	r25, 0x01	; 1
 3d2:	25 c0       	rjmp	.+74     	; 0x41e <sdraw_init+0x82>
        return 0;
	}
	
	UART_puts("CARD DETECTED\n");
 3d4:	88 e1       	ldi	r24, 0x18	; 24
 3d6:	91 e0       	ldi	r25, 0x01	; 1
 3d8:	0e 94 c4 04 	call	0x988	; 0x988 <UART_puts>
 3dc:	10 e0       	ldi	r17, 0x00	; 0
}

uint8_t sdraw_recv_byte()
{
    /* send dummy data for receiving some */
    return SPI_recv_byte();
 3de:	0e 94 e0 03 	call	0x7c0	; 0x7c0 <SPI_recv_byte>
	
	UART_puts("CARD DETECTED\n");


    /* card needs 74 cycles minimum to start up */
    for(i = 0; i < 10; ++i)
 3e2:	1f 5f       	subi	r17, 0xFF	; 255
 3e4:	1a 30       	cpi	r17, 0x0A	; 10
 3e6:	d9 f7       	brne	.-10     	; 0x3de <sdraw_init+0x42>
        /* byte recv : 8 cycles */
        sdraw_recv_byte();
    }

    /* address card */
    select_card();
 3e8:	80 91 62 00 	lds	r24, 0x0062
 3ec:	8f 77       	andi	r24, 0x7F	; 127
 3ee:	80 93 62 00 	sts	0x0062, r24
 3f2:	c0 e0       	ldi	r28, 0x00	; 0
 3f4:	d0 e0       	ldi	r29, 0x00	; 0

    /* reset card */
    for(j = 0; ; ++j)
    {
        response = sdraw_send_command_r1(CMD_GO_IDLE_STATE, 0);
 3f6:	40 e0       	ldi	r20, 0x00	; 0
 3f8:	50 e0       	ldi	r21, 0x00	; 0
 3fa:	60 e0       	ldi	r22, 0x00	; 0
 3fc:	70 e0       	ldi	r23, 0x00	; 0
 3fe:	80 e0       	ldi	r24, 0x00	; 0
 400:	0e 94 7b 00 	call	0xf6	; 0xf6 <sdraw_send_command_r1>
        if(response == (1 << R1_IDLE_STATE))
 404:	81 30       	cpi	r24, 0x01	; 1
 406:	89 f0       	breq	.+34     	; 0x42a <sdraw_init+0x8e>
            break;

        if(j == 0x1ff)
 408:	81 e0       	ldi	r24, 0x01	; 1
 40a:	cf 3f       	cpi	r28, 0xFF	; 255
 40c:	d8 07       	cpc	r29, r24

⌨️ 快捷键说明

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