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

📄 avr313.lss

📁 decode keyboard PC standard
💻 LSS
📖 第 1 页 / 共 2 页
字号:

Avr313.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000051c  00000000  00000000  00000094  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000002  00800060  0000051c  000005b0  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          0000008e  00800062  00800062  000005b2  2**0
                  ALLOC
  3 .debug_aranges 00000080  00000000  00000000  000005b2  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_pubnames 0000015d  00000000  00000000  00000632  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_info   000005c0  00000000  00000000  0000078f  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_abbrev 0000031b  00000000  00000000  00000d4f  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_line   000005e0  00000000  00000000  0000106a  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_frame  000000e0  00000000  00000000  0000164c  2**2
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_str    000001a1  00000000  00000000  0000172c  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_loc    000001ba  00000000  00000000  000018cd  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_ranges 00000018  00000000  00000000  00001a87  2**0
                  CONTENTS, READONLY, DEBUGGING

Disassembly of section .text:

00000000 <__vectors>:
   0:	9a c0       	rjmp	.+308    	; 0x136 <__ctors_end>
   2:	45 c2       	rjmp	.+1162   	; 0x48e <__vector_1>
   4:	b3 c0       	rjmp	.+358    	; 0x16c <__bad_interrupt>
   6:	b2 c0       	rjmp	.+356    	; 0x16c <__bad_interrupt>
   8:	b1 c0       	rjmp	.+354    	; 0x16c <__bad_interrupt>
   a:	b0 c0       	rjmp	.+352    	; 0x16c <__bad_interrupt>
   c:	af c0       	rjmp	.+350    	; 0x16c <__bad_interrupt>
   e:	ae c0       	rjmp	.+348    	; 0x16c <__bad_interrupt>
  10:	ad c0       	rjmp	.+346    	; 0x16c <__bad_interrupt>
  12:	ac c0       	rjmp	.+344    	; 0x16c <__bad_interrupt>
  14:	ab c0       	rjmp	.+342    	; 0x16c <__bad_interrupt>
  16:	aa c0       	rjmp	.+340    	; 0x16c <__bad_interrupt>
  18:	e2 c0       	rjmp	.+452    	; 0x1de <__vector_12>
  1a:	a8 c0       	rjmp	.+336    	; 0x16c <__bad_interrupt>
  1c:	a7 c0       	rjmp	.+334    	; 0x16c <__bad_interrupt>
  1e:	a6 c0       	rjmp	.+332    	; 0x16c <__bad_interrupt>
  20:	a5 c0       	rjmp	.+330    	; 0x16c <__bad_interrupt>
  22:	a4 c0       	rjmp	.+328    	; 0x16c <__bad_interrupt>
  24:	a3 c0       	rjmp	.+326    	; 0x16c <__bad_interrupt>

00000026 <unshifted>:
  26:	0d 09 0e 60 15 71 16 31 1a 7a 1b 73 1c 61 1d 77     ...`.q.1.z.s.a.w
  36:	1e 32 21 63 22 78 23 64 24 65 25 34 26 33 29 20     .2!c"x#d$e%4&3) 
  46:	2a 76 2b 66 2c 74 2d 72 2e 35 31 6e 32 62 33 68     *v+f,t-r.51n2b3h
  56:	34 67 35 79 36 36 39 2c 3a 6d 3b 6a 3c 75 3d 37     4g5y669,:m;j<u=7
  66:	3e 38 41 2c 42 6b 43 69 44 6f 45 30 46 39 49 2e     >8A,BkCiDoE0F9I.
  76:	4a 2f 4b 6c 4c 3b 4d 70 4e 2d 52 27 54 5b 55 3d     J/KlL;MpN-R'T[U=
  86:	5a 0d 5b 5d 5d 5c 61 3c 66 08 69 31 6b 34 6c 37     Z.[]]\a<f.i1k4l7
  96:	70 30 71 2e 72 32 73 35 74 36 75 38 79 2b 7a 33     p0q.r2s5t6u8y+z3
  a6:	7b 2d 7c 2a 7d 39 00 00                             {-|*}9..

000000ae <shifted>:
  ae:	0d 09 0e 7e 15 51 16 21 1a 5a 1b 53 1c 41 1d 57     ...~.Q.!.Z.S.A.W
  be:	1e 40 21 43 22 58 23 44 24 45 25 24 26 23 29 20     .@!C"X#D$E%$&#) 
  ce:	2a 56 2b 46 2c 54 2d 52 2e 25 31 4e 32 42 33 48     *V+F,T-R.%1N2B3H
  de:	34 47 35 59 36 5e 39 4c 3a 4d 3b 4a 3c 55 3d 2f     4G5Y6^9L:M;J<U=/
  ee:	3e 2a 41 3c 42 4b 43 49 44 4f 45 29 46 28 49 3e     >*A<BKCIDOE)F(I>
  fe:	4a 3f 4b 4c 4c 3a 4d 50 4e 5f 52 22 54 7b 55 2b     J?KLL:MPN_R"T{U+
 10e:	5a 0d 5b 7d 5d 7c 61 3e 66 08 69 31 6b 34 6c 37     Z.[}]|a>f.i1k4l7
 11e:	70 30 71 2e 72 32 73 35 74 36 75 38 79 2b 7a 33     p0q.r2s5t6u8y+z3
 12e:	7b 2d 7c 2a 7d 39 00 00                             {-|*}9..

00000136 <__ctors_end>:
 136:	11 24       	eor	r1, r1
 138:	1f be       	out	0x3f, r1	; 63
 13a:	cf e5       	ldi	r28, 0x5F	; 95
 13c:	d4 e0       	ldi	r29, 0x04	; 4
 13e:	de bf       	out	0x3e, r29	; 62
 140:	cd bf       	out	0x3d, r28	; 61

00000142 <__do_copy_data>:
 142:	10 e0       	ldi	r17, 0x00	; 0
 144:	a0 e6       	ldi	r26, 0x60	; 96
 146:	b0 e0       	ldi	r27, 0x00	; 0
 148:	ec e1       	ldi	r30, 0x1C	; 28
 14a:	f5 e0       	ldi	r31, 0x05	; 5
 14c:	02 c0       	rjmp	.+4      	; 0x152 <.do_copy_data_start>

0000014e <.do_copy_data_loop>:
 14e:	05 90       	lpm	r0, Z+
 150:	0d 92       	st	X+, r0

00000152 <.do_copy_data_start>:
 152:	a2 36       	cpi	r26, 0x62	; 98
 154:	b1 07       	cpc	r27, r17
 156:	d9 f7       	brne	.-10     	; 0x14e <.do_copy_data_loop>

00000158 <__do_clear_bss>:
 158:	10 e0       	ldi	r17, 0x00	; 0
 15a:	a2 e6       	ldi	r26, 0x62	; 98
 15c:	b0 e0       	ldi	r27, 0x00	; 0
 15e:	01 c0       	rjmp	.+2      	; 0x162 <.do_clear_bss_start>

00000160 <.do_clear_bss_loop>:
 160:	1d 92       	st	X+, r1

00000162 <.do_clear_bss_start>:
 162:	a0 3f       	cpi	r26, 0xF0	; 240
 164:	b1 07       	cpc	r27, r17
 166:	e1 f7       	brne	.-8      	; 0x160 <.do_clear_bss_loop>
 168:	d0 d1       	rcall	.+928    	; 0x50a <main>
 16a:	d6 c1       	rjmp	.+940    	; 0x518 <_exit>

0000016c <__bad_interrupt>:
 16c:	49 cf       	rjmp	.-366    	; 0x0 <__vectors>

0000016e <init_uart>:

#define UBR  (unsigned int)( F_CPU / (16.0 * 19200) - 0.5 )

void init_uart(void)
{
	ub_inptr  = UART_buffer;
 16e:	86 e6       	ldi	r24, 0x66	; 102
 170:	90 e0       	ldi	r25, 0x00	; 0
 172:	90 93 a7 00 	sts	0x00A7, r25
 176:	80 93 a6 00 	sts	0x00A6, r24
	ub_outptr = UART_buffer;
 17a:	90 93 a9 00 	sts	0x00A9, r25
 17e:	80 93 a8 00 	sts	0x00A8, r24
	ub_buffcnt = 0;
 182:	10 92 aa 00 	sts	0x00AA, r1

    UBRRL  = UBR;				// 19200bps @ 4 MHz
 186:	86 e2       	ldi	r24, 0x26	; 38
 188:	89 b9       	out	0x09, r24	; 9
    UCSRB  = (1 << TXEN);		// TX enable
 18a:	88 e0       	ldi	r24, 0x08	; 8
 18c:	8a b9       	out	0x0a, r24	; 10
}
 18e:	08 95       	ret

00000190 <putchar>:
}
*/

int putchar(int c)
{
	if (ub_buffcnt < BUFF_SIZE)
 190:	98 2f       	mov	r25, r24
 192:	80 91 aa 00 	lds	r24, 0x00AA
 196:	80 34       	cpi	r24, 0x40	; 64
 198:	18 f0       	brcs	.+6      	; 0x1a0 <putchar+0x10>
 19a:	20 e0       	ldi	r18, 0x00	; 0
 19c:	30 e0       	ldi	r19, 0x00	; 0
 19e:	1d c0       	rjmp	.+58     	; 0x1da <putchar+0x4a>
	{
		uint8_t tmp = SREG;
 1a0:	2f b7       	in	r18, 0x3f	; 63
		cli();
 1a2:	f8 94       	cli

		// Put character into buffer
		// Increment pointer and buffer count

		*ub_inptr++ = c;
 1a4:	e0 91 a6 00 	lds	r30, 0x00A6
 1a8:	f0 91 a7 00 	lds	r31, 0x00A7
 1ac:	91 93       	st	Z+, r25
 1ae:	f0 93 a7 00 	sts	0x00A7, r31
 1b2:	e0 93 a6 00 	sts	0x00A6, r30
		ub_buffcnt++;
 1b6:	80 91 aa 00 	lds	r24, 0x00AA
 1ba:	8f 5f       	subi	r24, 0xFF	; 255
 1bc:	80 93 aa 00 	sts	0x00AA, r24

		// Pointer wrapping

		if (ub_inptr >= UART_buffer + BUFF_SIZE)
 1c0:	e6 5a       	subi	r30, 0xA6	; 166
 1c2:	f0 40       	sbci	r31, 0x00	; 0
 1c4:	30 f0       	brcs	.+12     	; 0x1d2 <putchar+0x42>
			ub_inptr = UART_buffer;
 1c6:	86 e6       	ldi	r24, 0x66	; 102
 1c8:	90 e0       	ldi	r25, 0x00	; 0
 1ca:	90 93 a7 00 	sts	0x00A7, r25
 1ce:	80 93 a6 00 	sts	0x00A6, r24

		// Enable UART Data register empty interrupt

		UCSRB |= (1 << UDRIE);
 1d2:	55 9a       	sbi	0x0a, 5	; 10
		SREG = tmp;
 1d4:	2f bf       	out	0x3f, r18	; 63
 1d6:	21 e0       	ldi	r18, 0x01	; 1
 1d8:	30 e0       	ldi	r19, 0x00	; 0
	else
	{
		// Buffer is full
		return 0;
	}
}
 1da:	c9 01       	movw	r24, r18
 1dc:	08 95       	ret

000001de <__vector_12>:

// ----------------------------------------------
// Interrupt driven transmitter
// ----------------------------------------------
ISR (USART_UDRE_vect)
{
 1de:	1f 92       	push	r1
 1e0:	0f 92       	push	r0
 1e2:	0f b6       	in	r0, 0x3f	; 63
 1e4:	0f 92       	push	r0
 1e6:	11 24       	eor	r1, r1
 1e8:	8f 93       	push	r24
 1ea:	9f 93       	push	r25
 1ec:	ef 93       	push	r30
 1ee:	ff 93       	push	r31
	// Send next byte and increment pointer
	UDR = *ub_outptr++;
 1f0:	e0 91 a8 00 	lds	r30, 0x00A8
 1f4:	f0 91 a9 00 	lds	r31, 0x00A9
 1f8:	81 91       	ld	r24, Z+
 1fa:	8c b9       	out	0x0c, r24	; 12
 1fc:	f0 93 a9 00 	sts	0x00A9, r31
 200:	e0 93 a8 00 	sts	0x00A8, r30

	// Pointer wrapping
	if (ub_outptr >= UART_buffer + BUFF_SIZE)
 204:	e6 5a       	subi	r30, 0xA6	; 166
 206:	f0 40       	sbci	r31, 0x00	; 0
 208:	30 f0       	brcs	.+12     	; 0x216 <__vector_12+0x38>
		ub_outptr = UART_buffer;
 20a:	86 e6       	ldi	r24, 0x66	; 102
 20c:	90 e0       	ldi	r25, 0x00	; 0
 20e:	90 93 a9 00 	sts	0x00A9, r25
 212:	80 93 a8 00 	sts	0x00A8, r24

	// If buffer is empty: disable interrupt
	if(--ub_buffcnt == 0)
 216:	80 91 aa 00 	lds	r24, 0x00AA
 21a:	81 50       	subi	r24, 0x01	; 1
 21c:	80 93 aa 00 	sts	0x00AA, r24
 220:	80 91 aa 00 	lds	r24, 0x00AA
 224:	88 23       	and	r24, r24
 226:	09 f4       	brne	.+2      	; 0x22a <__vector_12+0x4c>
		UCSRB &= ~(1 << UDRIE);
 228:	55 98       	cbi	0x0a, 5	; 10
}
 22a:	ff 91       	pop	r31
 22c:	ef 91       	pop	r30
 22e:	9f 91       	pop	r25
 230:	8f 91       	pop	r24
 232:	0f 90       	pop	r0
 234:	0f be       	out	0x3f, r0	; 63
 236:	0f 90       	pop	r0
 238:	1f 90       	pop	r1
 23a:	18 95       	reti

0000023c <print_hexbyte>:
#include <inttypes.h>
#include "gpr.h"

void print_hexbyte(uint8_t i)
{
 23c:	0f 93       	push	r16
 23e:	1f 93       	push	r17
	uint8_t h, l;

	h = i & 0xF0;			  // High nibble
	h = h >> 4;
 240:	98 2f       	mov	r25, r24
 242:	92 95       	swap	r25
 244:	9f 70       	andi	r25, 0x0F	; 15
	h = h + '0';
 246:	09 2f       	mov	r16, r25
 248:	00 5d       	subi	r16, 0xD0	; 208

	if (h > '9')
 24a:	0a 33       	cpi	r16, 0x3A	; 58
 24c:	08 f0       	brcs	.+2      	; 0x250 <print_hexbyte+0x14>
		h = h + 7;
 24e:	09 5f       	subi	r16, 0xF9	; 249

	l = (i & 0x0F)+'0';		  // Low nibble
 250:	8f 70       	andi	r24, 0x0F	; 15
 252:	18 2f       	mov	r17, r24
 254:	10 5d       	subi	r17, 0xD0	; 208
	if (l > '9')
 256:	1a 33       	cpi	r17, 0x3A	; 58
 258:	08 f0       	brcs	.+2      	; 0x25c <print_hexbyte+0x20>
		l = l + 7;
 25a:	19 5f       	subi	r17, 0xF9	; 249

	putchar('0');
 25c:	80 e3       	ldi	r24, 0x30	; 48
 25e:	90 e0       	ldi	r25, 0x00	; 0
 260:	97 df       	rcall	.-210    	; 0x190 <putchar>
	putchar('x');
 262:	88 e7       	ldi	r24, 0x78	; 120
 264:	90 e0       	ldi	r25, 0x00	; 0
 266:	94 df       	rcall	.-216    	; 0x190 <putchar>
	putchar(h);
 268:	80 2f       	mov	r24, r16
 26a:	90 e0       	ldi	r25, 0x00	; 0
 26c:	91 df       	rcall	.-222    	; 0x190 <putchar>
	putchar(l);
 26e:	81 2f       	mov	r24, r17
 270:	90 e0       	ldi	r25, 0x00	; 0
 272:	8e df       	rcall	.-228    	; 0x190 <putchar>
}
 274:	1f 91       	pop	r17
 276:	0f 91       	pop	r16
 278:	08 95       	ret

0000027a <init_kb>:



void init_kb(void)
{
	kb_inptr =  kb_buffer;					  // Initialize buffer
 27a:	8c ea       	ldi	r24, 0xAC	; 172
 27c:	90 e0       	ldi	r25, 0x00	; 0
 27e:	90 93 ed 00 	sts	0x00ED, r25
 282:	80 93 ec 00 	sts	0x00EC, r24
	kb_outptr = kb_buffer;
 286:	90 93 ef 00 	sts	0x00EF, r25
 28a:	80 93 ee 00 	sts	0x00EE, r24
	kb_buffcnt = 0;
 28e:	10 92 ab 00 	sts	0x00AB, r1

	MCUCR = (1 << ISC01);					  // INT0 interrupt on falling edge
 292:	82 e0       	ldi	r24, 0x02	; 2
 294:	85 bf       	out	0x35, r24	; 53
	GICR= (1 << INT0);						  // Enable INT0 interrupt
 296:	80 e4       	ldi	r24, 0x40	; 64
 298:	8b bf       	out	0x3b, r24	; 59
}
 29a:	08 95       	ret

0000029c <put_kbbuff>:
// Stuff a decoded byte into the keyboard buffer.
// This routine is currently only called by "decode" which is called 
// from within the ISR so atomic precautions are not needed here.
//-------------------------------------------------------------------
void put_kbbuff(uint8_t c)
{
 29c:	98 2f       	mov	r25, r24
	// uint8_t tmp = SREG;
	// cli();

	if (kb_buffcnt < KB_BUFF_SIZE)			  // If buffer not full
 29e:	80 91 ab 00 	lds	r24, 0x00AB
 2a2:	80 34       	cpi	r24, 0x40	; 64
 2a4:	b8 f4       	brcc	.+46     	; 0x2d4 <put_kbbuff+0x38>
	{
		// Put character into buffer
		// Increment pointer
		*kb_inptr++ = c;
 2a6:	e0 91 ec 00 	lds	r30, 0x00EC
 2aa:	f0 91 ed 00 	lds	r31, 0x00ED
 2ae:	91 93       	st	Z+, r25
 2b0:	f0 93 ed 00 	sts	0x00ED, r31
 2b4:	e0 93 ec 00 	sts	0x00EC, r30
		kb_buffcnt++;
 2b8:	80 91 ab 00 	lds	r24, 0x00AB
 2bc:	8f 5f       	subi	r24, 0xFF	; 255
 2be:	80 93 ab 00 	sts	0x00AB, r24

		// Pointer wrapping
		if (kb_inptr >= kb_buffer + KB_BUFF_SIZE)
 2c2:	ec 5e       	subi	r30, 0xEC	; 236
 2c4:	f0 40       	sbci	r31, 0x00	; 0
 2c6:	30 f0       	brcs	.+12     	; 0x2d4 <put_kbbuff+0x38>
			kb_inptr = kb_buffer;
 2c8:	8c ea       	ldi	r24, 0xAC	; 172
 2ca:	90 e0       	ldi	r25, 0x00	; 0
 2cc:	90 93 ed 00 	sts	0x00ED, r25
 2d0:	80 93 ec 00 	sts	0x00EC, r24
 2d4:	08 95       	ret

000002d6 <get_kbchar>:
int get_kbchar(void)
{
	int byte;

	// Wait for data
	while(kb_buffcnt == 0);
 2d6:	80 91 ab 00 	lds	r24, 0x00AB
 2da:	88 23       	and	r24, r24
 2dc:	e1 f3       	breq	.-8      	; 0x2d6 <get_kbchar>

	uint8_t tmp = SREG;
 2de:	3f b7       	in	r19, 0x3f	; 63
	cli();
 2e0:	f8 94       	cli

	// Get byte - Increment pointer
	byte = *kb_outptr++;
 2e2:	e0 91 ee 00 	lds	r30, 0x00EE
 2e6:	f0 91 ef 00 	lds	r31, 0x00EF
 2ea:	21 91       	ld	r18, Z+
 2ec:	f0 93 ef 00 	sts	0x00EF, r31
 2f0:	e0 93 ee 00 	sts	0x00EE, r30

	// Pointer wrapping
	if (kb_outptr >= kb_buffer + KB_BUFF_SIZE)
 2f4:	ec 5e       	subi	r30, 0xEC	; 236
 2f6:	f0 40       	sbci	r31, 0x00	; 0

⌨️ 快捷键说明

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