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

📄 uartmain.lst

📁 Virtual GPS NEMAcode transmitter using serial port, AVR Atmega32 microcontrooler
💻 LST
📖 第 1 页 / 共 4 页
字号:

uartmain.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000009ca  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000096  00800060  000009ca  00000a5e  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000058  008000f6  008000f6  00000af4  2**0
                  ALLOC
  3 .noinit       00000000  0080014e  0080014e  00000af4  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00000af4  2**0
                  CONTENTS
  5 .stab         0000036c  00000000  00000000  00000af4  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000084  00000000  00000000  00000e60  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_aranges 00000028  00000000  00000000  00000ee4  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_pubnames 0000006a  00000000  00000000  00000f0c  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_info   0000039a  00000000  00000000  00000f76  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_abbrev 00000212  00000000  00000000  00001310  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_line   00000328  00000000  00000000  00001522  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_str    00000109  00000000  00000000  0000184a  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54 <__ctors_end>
   4:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
   8:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
   c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  10:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  14:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  18:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  1c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  20:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  24:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  28:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  2c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  30:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  34:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  38:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  3c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  40:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  44:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  48:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  4c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  50:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>

00000054 <__ctors_end>:
  54:	11 24       	eor	r1, r1
  56:	1f be       	out	0x3f, r1	; 63
  58:	cf e5       	ldi	r28, 0x5F	; 95
  5a:	d8 e0       	ldi	r29, 0x08	; 8
  5c:	de bf       	out	0x3e, r29	; 62
  5e:	cd bf       	out	0x3d, r28	; 61

00000060 <__do_copy_data>:
  60:	10 e0       	ldi	r17, 0x00	; 0
  62:	a0 e6       	ldi	r26, 0x60	; 96
  64:	b0 e0       	ldi	r27, 0x00	; 0
  66:	ea ec       	ldi	r30, 0xCA	; 202
  68:	f9 e0       	ldi	r31, 0x09	; 9
  6a:	02 c0       	rjmp	.+4      	; 0x70 <.do_copy_data_start>

0000006c <.do_copy_data_loop>:
  6c:	05 90       	lpm	r0, Z+
  6e:	0d 92       	st	X+, r0

00000070 <.do_copy_data_start>:
  70:	a6 3f       	cpi	r26, 0xF6	; 246
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c <.do_copy_data_loop>

00000076 <__do_clear_bss>:
  76:	11 e0       	ldi	r17, 0x01	; 1
  78:	a6 ef       	ldi	r26, 0xF6	; 246
  7a:	b0 e0       	ldi	r27, 0x00	; 0
  7c:	01 c0       	rjmp	.+2      	; 0x80 <.do_clear_bss_start>

0000007e <.do_clear_bss_loop>:
  7e:	1d 92       	st	X+, r1

00000080 <.do_clear_bss_start>:
  80:	ae 34       	cpi	r26, 0x4E	; 78
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0c 94 47 00 	jmp	0x8e <main>

0000008a <__bad_interrupt>:
  8a:	0c 94 00 00 	jmp	0x0 <__vectors>

0000008e <main>:

FILE uart_str = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW);

int main(void)
{
  8e:	cf e5       	ldi	r28, 0x5F	; 95
  90:	d8 e0       	ldi	r29, 0x08	; 8
  92:	de bf       	out	0x3e, r29	; 62
  94:	cd bf       	out	0x3d, r28	; 61

	uart_init();
  96:	0e 94 60 00 	call	0xc0 <uart_init>
	stdout = stdin = &uart_str;
  9a:	80 e6       	ldi	r24, 0x60	; 96
  9c:	90 e0       	ldi	r25, 0x00	; 0
  9e:	90 93 49 01 	sts	0x0149, r25
  a2:	80 93 48 01 	sts	0x0148, r24
  a6:	90 93 4b 01 	sts	0x014B, r25
  aa:	80 93 4a 01 	sts	0x014A, r24

 
while (1)
{
   
   printf("$GPGGA,151029,2335.4756,N,05810.1986,E,0,00,,,M,,M,,*54\r\n");
  ae:	8e e6       	ldi	r24, 0x6E	; 110
  b0:	90 e0       	ldi	r25, 0x00	; 0
  b2:	0e 94 84 01 	call	0x308 <puts>
   printf("$GPGSV,3,3,12,12,10,038,00,13,00,291,00,14,66,050,00,15,00,132,00*7F\r\n");
  b6:	87 ea       	ldi	r24, 0xA7	; 167
  b8:	90 e0       	ldi	r25, 0x00	; 0
  ba:	0e 94 84 01 	call	0x308 <puts>
  be:	f7 cf       	rjmp	.-18     	; 0xae <main+0x20>

000000c0 <uart_init>:
#if F_CPU < 2000000UL && defined(U2X)
  UCSRA = _BV(U2X);             /* improve baud rate error by using 2x clk */
  UBRRL = (F_CPU / (8UL * UART_BAUD)) - 1;
#else
  UBRRL = (F_CPU / (16UL * UART_BAUD)) - 1;
  c0:	81 e8       	ldi	r24, 0x81	; 129
  c2:	89 b9       	out	0x09, r24	; 9
#endif
  UCSRB = _BV(TXEN) | _BV(RXEN); /* tx/rx enable */
  c4:	88 e1       	ldi	r24, 0x18	; 24
  c6:	8a b9       	out	0x0a, r24	; 10
  c8:	08 95       	ret

000000ca <uart_putchar>:
}

/*
 * Send character c down the UART Tx, wait until tx holding register
 * is empty.
 */
int
uart_putchar(char c, FILE *stream)
{
  ca:	cf 93       	push	r28
  cc:	c8 2f       	mov	r28, r24

  if (c == '\a')
  ce:	87 30       	cpi	r24, 0x07	; 7
  d0:	49 f4       	brne	.+18     	; 0xe4 <uart_putchar+0x1a>
    {
      fputs("*ring*\n", stderr);
  d2:	60 91 4c 01 	lds	r22, 0x014C
  d6:	70 91 4d 01 	lds	r23, 0x014D
  da:	8d ee       	ldi	r24, 0xED	; 237
  dc:	90 e0       	ldi	r25, 0x00	; 0
  de:	0e 94 5c 01 	call	0x2b8 <fputs>
      return 0;
  e2:	08 c0       	rjmp	.+16     	; 0xf4 <uart_putchar+0x2a>
    }

  if (c == '\n')
  e4:	8a 30       	cpi	r24, 0x0A	; 10
  e6:	19 f4       	brne	.+6      	; 0xee <uart_putchar+0x24>
    uart_putchar('\r', stream);
  e8:	8d e0       	ldi	r24, 0x0D	; 13
  ea:	0e 94 65 00 	call	0xca <uart_putchar>
  loop_until_bit_is_set(UCSRA, UDRE);
  ee:	5d 9b       	sbis	0x0b, 5	; 11
  f0:	fe cf       	rjmp	.-4      	; 0xee <uart_putchar+0x24>
  UDR = c;
  f2:	cc b9       	out	0x0c, r28	; 12

  return 0;
}
  f4:	80 e0       	ldi	r24, 0x00	; 0
  f6:	90 e0       	ldi	r25, 0x00	; 0
  f8:	cf 91       	pop	r28
  fa:	08 95       	ret

000000fc <uart_getchar>:

/*
 * Receive a character from the UART Rx.
 *
 * This features a simple line-editor that allows to delete and
 * re-edit the characters entered, until either CR or NL is entered.
 * Printable characters entered will be echoed using uart_putchar().
 *
 * Editing characters:
 *
 * . \b (BS) or \177 (DEL) delete the previous character
 * . ^u kills the entire input buffer
 * . ^w deletes the previous word
 * . ^r sends a CR, and then reprints the buffer
 * . \t will be replaced by a single space
 *
 * All other control characters will be ignored.
 *
 * The internal line buffer is RX_BUFSIZE (80) characters long, which
 * includes the terminating \n (but no terminating \0).  If the buffer
 * is full (i. e., at RX_BUFSIZE-1 characters in order to keep space for
 * the trailing \n), any further input attempts will send a \a to
 * uart_putchar() (BEL character), although line editing is still
 * allowed.
 *
 * Input errors while talking to the UART will cause an immediate
 * return of -1 (error indication).  Notably, this will be caused by a
 * framing error (e. g. serial line "break" condition), by an input
 * overrun, and by a parity error (if parity was enabled and automatic
 * parity recognition is supported by hardware).
 *
 * Successive calls to uart_getchar() will be satisfied from the
 * internal buffer until that buffer is emptied again.
 */
int
uart_getchar(FILE *stream)
{
  fc:	cf 92       	push	r12
  fe:	df 92       	push	r13
 100:	ef 92       	push	r14
 102:	ff 92       	push	r15
 104:	0f 93       	push	r16
 106:	1f 93       	push	r17
 108:	cf 93       	push	r28
 10a:	df 93       	push	r29
 10c:	7c 01       	movw	r14, r24
  uint8_t c;
  char *cp, *cp2;
  static char b[RX_BUFSIZE];
  static char *rxp;

  if (rxp == 0)
 10e:	80 91 46 01 	lds	r24, 0x0146
 112:	90 91 47 01 	lds	r25, 0x0147
 116:	89 2b       	or	r24, r25
 118:	09 f0       	breq	.+2      	; 0x11c <uart_getchar+0x20>
 11a:	b5 c0       	rjmp	.+362    	; 0x286 <uart_getchar+0x18a>
    for (cp = b;;)
 11c:	06 ef       	ldi	r16, 0xF6	; 246
 11e:	10 e0       	ldi	r17, 0x00	; 0
 120:	68 01       	movw	r12, r16
      {
	loop_until_bit_is_set(UCSRA, RXC);
 122:	5f 9b       	sbis	0x0b, 7	; 11
 124:	fe cf       	rjmp	.-4      	; 0x122 <uart_getchar+0x26>
	if (UCSRA & _BV(FE))
 126:	5c 9b       	sbis	0x0b, 4	; 11
 128:	03 c0       	rjmp	.+6      	; 0x130 <uart_getchar+0x34>
	  return _FDEV_EOF;
 12a:	8e ef       	ldi	r24, 0xFE	; 254
 12c:	9f ef       	ldi	r25, 0xFF	; 255
 12e:	bb c0       	rjmp	.+374    	; 0x2a6 <uart_getchar+0x1aa>
	if (UCSRA & _BV(DOR))
 130:	5b 99       	sbic	0x0b, 3	; 11
 132:	48 c0       	rjmp	.+144    	; 0x1c4 <uart_getchar+0xc8>
	  return _FDEV_ERR;
	c = UDR;
 134:	9c b1       	in	r25, 0x0c	; 12
	/* behaviour similar to Unix stty ICRNL */
	if (c == '\r')
 136:	9d 30       	cpi	r25, 0x0D	; 13
 138:	11 f4       	brne	.+4      	; 0x13e <uart_getchar+0x42>
	  c = '\n';
 13a:	9a e0       	ldi	r25, 0x0A	; 10
 13c:	02 c0       	rjmp	.+4      	; 0x142 <uart_getchar+0x46>
	if (c == '\n')
 13e:	9a 30       	cpi	r25, 0x0A	; 10
 140:	69 f4       	brne	.+26     	; 0x15c <uart_getchar+0x60>
	  {
	    *cp = c;
 142:	f8 01       	movw	r30, r16
 144:	90 83       	st	Z, r25
	    uart_putchar(c, stream);
 146:	b7 01       	movw	r22, r14
 148:	89 2f       	mov	r24, r25
 14a:	0e 94 65 00 	call	0xca <uart_putchar>
	    rxp = b;
 14e:	86 ef       	ldi	r24, 0xF6	; 246
 150:	90 e0       	ldi	r25, 0x00	; 0
 152:	90 93 47 01 	sts	0x0147, r25
 156:	80 93 46 01 	sts	0x0146, r24
	    break;
 15a:	95 c0       	rjmp	.+298    	; 0x286 <uart_getchar+0x18a>
	  }
	else if (c == '\t')
 15c:	99 30       	cpi	r25, 0x09	; 9
 15e:	09 f4       	brne	.+2      	; 0x162 <uart_getchar+0x66>
	  c = ' ';
 160:	90 e2       	ldi	r25, 0x20	; 32

	if ((c >= (uint8_t)' ' && c <= (uint8_t)'\x7e') ||
 162:	89 2f       	mov	r24, r25
 164:	80 52       	subi	r24, 0x20	; 32
 166:	8f 35       	cpi	r24, 0x5F	; 95
 168:	10 f0       	brcs	.+4      	; 0x16e <uart_getchar+0x72>
 16a:	90 3a       	cpi	r25, 0xA0	; 160
 16c:	78 f0       	brcs	.+30     	; 0x18c <uart_getchar+0x90>
	    c >= (uint8_t)'\xa0')
	  {
	    if (cp == b + RX_BUFSIZE - 1)
 16e:	f1 e0       	ldi	r31, 0x01	; 1
 170:	05 34       	cpi	r16, 0x45	; 69
 172:	1f 07       	cpc	r17, r31
 174:	19 f4       	brne	.+6      	; 0x17c <uart_getchar+0x80>
	      uart_putchar('\a', stream);
 176:	b7 01       	movw	r22, r14
 178:	87 e0       	ldi	r24, 0x07	; 7
 17a:	05 c0       	rjmp	.+10     	; 0x186 <uart_getchar+0x8a>
	    else
	      {
		*cp++ = c;
 17c:	f8 01       	movw	r30, r16
 17e:	91 93       	st	Z+, r25
 180:	8f 01       	movw	r16, r30
		uart_putchar(c, stream);
 182:	b7 01       	movw	r22, r14
 184:	89 2f       	mov	r24, r25
 186:	0e 94 65 00 	call	0xca <uart_putchar>
	      }
	    continue;
 18a:	cb cf       	rjmp	.-106    	; 0x122 <uart_getchar+0x26>
	  }

	switch (c)
 18c:	89 2f       	mov	r24, r25
 18e:	99 27       	eor	r25, r25
 190:	82 31       	cpi	r24, 0x12	; 18
 192:	91 05       	cpc	r25, r1
 194:	79 f1       	breq	.+94     	; 0x1f4 <uart_getchar+0xf8>
 196:	83 31       	cpi	r24, 0x13	; 19
 198:	91 05       	cpc	r25, r1
 19a:	34 f4       	brge	.+12     	; 0x1a8 <uart_getchar+0xac>
 19c:	83 30       	cpi	r24, 0x03	; 3
 19e:	91 05       	cpc	r25, r1
 1a0:	89 f0       	breq	.+34     	; 0x1c4 <uart_getchar+0xc8>
 1a2:	08 97       	sbiw	r24, 0x08	; 8
 1a4:	91 f0       	breq	.+36     	; 0x1ca <uart_getchar+0xce>
 1a6:	bd cf       	rjmp	.-134    	; 0x122 <uart_getchar+0x26>
 1a8:	87 31       	cpi	r24, 0x17	; 23
 1aa:	91 05       	cpc	r25, r1
 1ac:	09 f4       	brne	.+2      	; 0x1b0 <uart_getchar+0xb4>

⌨️ 快捷键说明

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