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

📄 sdraw.lss

📁 TFT-LCD Atmega128 Source Code
💻 LSS
📖 第 1 页 / 共 5 页
字号:
 638:	6f 90       	pop	r6
 63a:	5f 90       	pop	r5
 63c:	4f 90       	pop	r4
 63e:	3f 90       	pop	r3
 640:	2f 90       	pop	r2
 642:	08 95       	ret

00000644 <sdraw_sync>:

    return response;
}

uint8_t sdraw_sync()
{
 644:	80 91 fe 04 	lds	r24, 0x04FE
 648:	88 23       	and	r24, r24
 64a:	11 f0       	breq	.+4      	; 0x650 <sdraw_sync+0xc>
 64c:	81 e0       	ldi	r24, 0x01	; 1
 64e:	08 95       	ret
    if(raw_block_written)
        return 1;
    if(!sdraw_write(raw_block_address, raw_block, sizeof(raw_block)))
 650:	60 91 ff 04 	lds	r22, 0x04FF
 654:	70 91 00 05 	lds	r23, 0x0500
 658:	80 91 01 05 	lds	r24, 0x0501
 65c:	90 91 02 05 	lds	r25, 0x0502
 660:	20 e0       	ldi	r18, 0x00	; 0
 662:	32 e0       	ldi	r19, 0x02	; 2
 664:	4e ef       	ldi	r20, 0xFE	; 254
 666:	52 e0       	ldi	r21, 0x02	; 2
 668:	0e 94 5a 02 	call	0x4b4	; 0x4b4 <sdraw_write>
 66c:	88 23       	and	r24, r24
 66e:	19 f0       	breq	.+6      	; 0x676 <sdraw_sync+0x32>
        return 0;
    raw_block_written = 1;
 670:	81 e0       	ldi	r24, 0x01	; 1
 672:	80 93 fe 04 	sts	0x04FE, r24

    return 1;
}
 676:	08 95       	ret

00000678 <sdraw_read>:

uint8_t sdraw_read(uint32_t offset, uint8_t* buffer, uint16_t length)
{
 678:	2f 92       	push	r2
 67a:	3f 92       	push	r3
 67c:	4f 92       	push	r4
 67e:	5f 92       	push	r5
 680:	6f 92       	push	r6
 682:	7f 92       	push	r7
 684:	8f 92       	push	r8
 686:	9f 92       	push	r9
 688:	af 92       	push	r10
 68a:	bf 92       	push	r11
 68c:	cf 92       	push	r12
 68e:	df 92       	push	r13
 690:	ef 92       	push	r14
 692:	ff 92       	push	r15
 694:	0f 93       	push	r16
 696:	1f 93       	push	r17
 698:	cf 93       	push	r28
 69a:	df 93       	push	r29
 69c:	5b 01       	movw	r10, r22
 69e:	6c 01       	movw	r12, r24
 6a0:	2a 01       	movw	r4, r20
 6a2:	49 01       	movw	r8, r18
    while(length > 0)
    {
        /* determine byte count to read at once */
        block_address = offset & 0xFFFFFE00;
        block_offset = offset & 0x01FF;
        read_length = 512 - block_offset; /* read up to block border */
 6a4:	21 2c       	mov	r2, r1
 6a6:	12 e0       	ldi	r17, 0x02	; 2
 6a8:	31 2e       	mov	r3, r17
 6aa:	54 c0       	rjmp	.+168    	; 0x754 <sdraw_read+0xdc>
        if(read_length > length)
            read_length = length;
        
        if(!sdraw_sync())
 6ac:	0e 94 22 03 	call	0x644	; 0x644 <sdraw_sync>
 6b0:	88 23       	and	r24, r24
 6b2:	09 f4       	brne	.+2      	; 0x6b6 <sdraw_read+0x3e>
 6b4:	54 c0       	rjmp	.+168    	; 0x75e <sdraw_read+0xe6>
            return 0;


        /* address card */
        select_card();
 6b6:	80 91 62 00 	lds	r24, 0x0062
 6ba:	8f 77       	andi	r24, 0x7F	; 127
 6bc:	80 93 62 00 	sts	0x0062, r24

        /* send single block request */
        if(sdraw_send_command_r1(CMD_READ_SINGLE_BLOCK, block_address))
 6c0:	b6 01       	movw	r22, r12
 6c2:	a5 01       	movw	r20, r10
 6c4:	40 70       	andi	r20, 0x00	; 0
 6c6:	5e 7f       	andi	r21, 0xFE	; 254
 6c8:	81 e1       	ldi	r24, 0x11	; 17
 6ca:	0e 94 7b 00 	call	0xf6	; 0xf6 <sdraw_send_command_r1>
 6ce:	88 23       	and	r24, r24
 6d0:	39 f0       	breq	.+14     	; 0x6e0 <sdraw_read+0x68>
        {
            unselect_card();
 6d2:	80 91 62 00 	lds	r24, 0x0062
 6d6:	80 68       	ori	r24, 0x80	; 128
 6d8:	80 93 62 00 	sts	0x0062, r24
 6dc:	80 e0       	ldi	r24, 0x00	; 0
 6de:	3f c0       	rjmp	.+126    	; 0x75e <sdraw_read+0xe6>
}

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

        /* wait for data block (start byte 0xfe) */
        while(sdraw_recv_byte() != 0xFE);
 6e4:	8e 3f       	cpi	r24, 0xFE	; 254
 6e6:	e1 f7       	brne	.-8      	; 0x6e0 <sdraw_read+0x68>

    while(length > 0)
    {
        /* determine byte count to read at once */
        block_address = offset & 0xFFFFFE00;
        block_offset = offset & 0x01FF;
 6e8:	bf ef       	ldi	r27, 0xFF	; 255
 6ea:	eb 2e       	mov	r14, r27
 6ec:	b1 e0       	ldi	r27, 0x01	; 1
 6ee:	fb 2e       	mov	r15, r27
 6f0:	ea 20       	and	r14, r10
 6f2:	fb 20       	and	r15, r11
        read_length = 512 - block_offset; /* read up to block border */
 6f4:	81 01       	movw	r16, r2
 6f6:	0e 19       	sub	r16, r14
 6f8:	1f 09       	sbc	r17, r15
 6fa:	80 16       	cp	r8, r16
 6fc:	91 06       	cpc	r9, r17
 6fe:	08 f4       	brcc	.+2      	; 0x702 <sdraw_read+0x8a>
 700:	84 01       	movw	r16, r8

        /* wait for data block (start byte 0xfe) */
        while(sdraw_recv_byte() != 0xFE);

        /* read byte block */
        read_to = block_offset + read_length;
 702:	38 01       	movw	r6, r16
 704:	6e 0c       	add	r6, r14
 706:	7f 1c       	adc	r7, r15
 708:	c0 e0       	ldi	r28, 0x00	; 0
 70a:	d0 e0       	ldi	r29, 0x00	; 0
}

uint8_t sdraw_recv_byte()
{
    /* send dummy data for receiving some */
    return SPI_recv_byte();
 70c:	0e 94 e0 03 	call	0x7c0	; 0x7c0 <SPI_recv_byte>
        read_to = block_offset + read_length;
        
		for(i = 0; i < 512; ++i)
        {
            uint8_t b = sdraw_recv_byte();
            if(i >= block_offset && i < read_to)
 710:	ce 15       	cp	r28, r14
 712:	df 05       	cpc	r29, r15
 714:	30 f0       	brcs	.+12     	; 0x722 <sdraw_read+0xaa>
 716:	c6 15       	cp	r28, r6
 718:	d7 05       	cpc	r29, r7
 71a:	18 f4       	brcc	.+6      	; 0x722 <sdraw_read+0xaa>
                *buffer++ = b;
 71c:	f2 01       	movw	r30, r4
 71e:	81 93       	st	Z+, r24
 720:	2f 01       	movw	r4, r30
        while(sdraw_recv_byte() != 0xFE);

        /* read byte block */
        read_to = block_offset + read_length;
        
		for(i = 0; i < 512; ++i)
 722:	21 96       	adiw	r28, 0x01	; 1
 724:	f2 e0       	ldi	r31, 0x02	; 2
 726:	c0 30       	cpi	r28, 0x00	; 0
 728:	df 07       	cpc	r29, r31
 72a:	81 f7       	brne	.-32     	; 0x70c <sdraw_read+0x94>
}

uint8_t sdraw_recv_byte()
{
    /* send dummy data for receiving some */
    return SPI_recv_byte();
 72c:	0e 94 e0 03 	call	0x7c0	; 0x7c0 <SPI_recv_byte>
        /* read crc16 */
        sdraw_recv_byte();
        sdraw_recv_byte();
        
        /* deaddress card */
        unselect_card();
 730:	0e 94 e0 03 	call	0x7c0	; 0x7c0 <SPI_recv_byte>
 734:	80 91 62 00 	lds	r24, 0x0062
 738:	80 68       	ori	r24, 0x80	; 128
 73a:	80 93 62 00 	sts	0x0062, r24
}

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

        /* let card some time to finish */
        sdraw_recv_byte();
 

        length -= read_length;
 742:	80 1a       	sub	r8, r16
 744:	91 0a       	sbc	r9, r17
        offset += read_length;
 746:	c8 01       	movw	r24, r16
 748:	a0 e0       	ldi	r26, 0x00	; 0
 74a:	b0 e0       	ldi	r27, 0x00	; 0
 74c:	a8 0e       	add	r10, r24
 74e:	b9 1e       	adc	r11, r25
 750:	ca 1e       	adc	r12, r26
 752:	db 1e       	adc	r13, r27
    uint16_t block_offset;
    uint16_t read_length;
	uint16_t read_to;
	uint16_t i;

    while(length > 0)
 754:	81 14       	cp	r8, r1
 756:	91 04       	cpc	r9, r1
 758:	09 f0       	breq	.+2      	; 0x75c <sdraw_read+0xe4>
 75a:	a8 cf       	rjmp	.-176    	; 0x6ac <sdraw_read+0x34>
 75c:	81 e0       	ldi	r24, 0x01	; 1
        length -= read_length;
        offset += read_length;
    }

    return 1;
}
 75e:	df 91       	pop	r29
 760:	cf 91       	pop	r28
 762:	1f 91       	pop	r17
 764:	0f 91       	pop	r16
 766:	ff 90       	pop	r15
 768:	ef 90       	pop	r14
 76a:	df 90       	pop	r13
 76c:	cf 90       	pop	r12
 76e:	bf 90       	pop	r11
 770:	af 90       	pop	r10
 772:	9f 90       	pop	r9
 774:	8f 90       	pop	r8
 776:	7f 90       	pop	r7
 778:	6f 90       	pop	r6
 77a:	5f 90       	pop	r5
 77c:	4f 90       	pop	r4
 77e:	3f 90       	pop	r3
 780:	2f 90       	pop	r2
 782:	08 95       	ret

00000784 <SPI_set_speed>:
#define SPI_MODE1_CPOL0CPHA1		0x04
#define SPI_MODE2_CPOL1CPHA0		0x08
#define SPI_MODE3_CPOL1CPHA1		0x0C

void SPI_set_speed(unsigned char speed, unsigned option)
{
 784:	9d b1       	in	r25, 0x0d	; 13
 786:	9c 7f       	andi	r25, 0xFC	; 252
 788:	98 2b       	or	r25, r24
 78a:	9d b9       	out	0x0d, r25	; 13
	SPCR = (SPCR & 0xFC) | speed;
	SPSR = (SPSR & 0xFE) | option;
 78c:	8e b1       	in	r24, 0x0e	; 14
 78e:	8e 7f       	andi	r24, 0xFE	; 254
 790:	86 2b       	or	r24, r22
 792:	8e b9       	out	0x0e, r24	; 14
}
 794:	08 95       	ret

00000796 <SPI_set_mode>:

void SPI_set_mode(unsigned mode)
{
 796:	9d b1       	in	r25, 0x0d	; 13
 798:	93 7f       	andi	r25, 0xF3	; 243
 79a:	98 2b       	or	r25, r24
 79c:	9d b9       	out	0x0d, r25	; 13
	SPCR = (SPCR & 0xF3) | mode;
}
 79e:	08 95       	ret

000007a0 <SPI_init>:

void SPI_init()
{
 7a0:	8d b1       	in	r24, 0x0d	; 13
 7a2:	83 60       	ori	r24, 0x03	; 3
 7a4:	8d b9       	out	0x0d, r24	; 13
#define SPI_MODE3_CPOL1CPHA1		0x0C

void SPI_set_speed(unsigned char speed, unsigned option)
{
	SPCR = (SPCR & 0xFC) | speed;
	SPSR = (SPSR & 0xFE) | option;
 7a6:	70 98       	cbi	0x0e, 0	; 14
}

void SPI_set_mode(unsigned mode)
{
	SPCR = (SPCR & 0xF3) | mode;
 7a8:	8d b1       	in	r24, 0x0d	; 13
 7aa:	83 7f       	andi	r24, 0xF3	; 243
 7ac:	8d b9       	out	0x0d, r24	; 13
{
	// Setup SPI bus with the Lowest Speed & SPI MODE0
	SPI_set_speed(SPI_SPEED_FOSC_DIV_128, SPI_2X_DISABLE);
	SPI_set_mode(SPI_MODE0_CPOL0CPHA0);

	SPCR |= _BV(SPE) | _BV(MSTR); 
 7ae:	8d b1       	in	r24, 0x0d	; 13
 7b0:	80 65       	ori	r24, 0x50	; 80
 7b2:	8d b9       	out	0x0d, r24	; 13
}
 7b4:	08 95       	ret

000007b6 <SPI_send_byte>:

unsigned char SPI_send_byte(unsigned char data)
{
 7b6:	8f b9       	out	0x0f, r24	; 15
	SPDR = data;

	while(!(SPSR & _BV(SPIF)));
 7b8:	77 9b       	sbis	0x0e, 7	; 14
 7ba:	fe cf       	rjmp	.-4      	; 0x7b8 <SPI_send_byte+0x2>

	return SPDR;
 7bc:	8f b1       	in	r24, 0x0f	; 15
}
 7be:	08 95       	ret

000007c0 <SPI_recv_byte>:

unsigned char SPI_recv_byte()
{
 7c0:	8f ef       	ldi	r24, 0xFF	; 255
 7c2:	8f b9       	out	0x0f, r24	; 15

unsigned char SPI_send_byte(unsigned char data)
{
	SPDR = data;

	while(!(SPSR & _BV(SPIF)));
 7c4:	77 9b       	sbis	0x0e, 7	; 14
 7c6:	fe cf       	rjmp	.-4      	; 0x7c4 <SPI_recv_byte+0x4>

	return SPDR;
 7c8:	8f b1       	in	r24, 0x0f	; 15
}

unsigned char SPI_recv_byte()
{
	return SPI_send_byte(0xFF);	// Send dummy byte for recv operation
}
 7ca:	08 95       	ret

000007cc <SPI_stop>:

void SPI_stop()
{
 7cc:	1d b8       	out	0x0d, r1	; 13
	SPCR = 0;
}
 7ce:	08 95       	ret

000007d0 <board_init>:
#include "config.h"


void board_init()
{
 7d0:	8f ef       	ldi	r24, 0xFF	; 255
 7d2:	8a bb       	out	0x1a, r24	; 26
	DDRA = 0xFF;
	PORTA = 0x00;
 7d4:	1b ba       	out	0x1b, r1	; 27
	DDRC = 0xFF;
 7d6:	84 bb       	out	0x14, r24	; 20
	PORTC = 0x00;
 7d8:	15 ba       	out	0x15, r1	; 21
	
	DDRG = 0xFF;
 7da:	80 93 64 00 	sts	0x0064, r24
	PORTG = _BV(0) | _BV(1) | _BV(3) | _BV(4);
 7de:	8b e1       	ldi	r24, 0x1B	; 27
 7e0:	80 93 65 00 	sts	0x0065, r24

	DDRB = 0b00000111;
 7e4:	87 e0       	ldi	r24, 0x07	; 7
 7e6:	87 bb       	out	0x17, r24	; 23
	PORTB |= _BV(0);
 7e8:	c0 9a       	sbi	0x18, 0	; 24

	DDRD = 0b11011011;
 7ea:	8b ed       	ldi	r24, 0xDB	; 219

⌨️ 快捷键说明

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