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

📄 usb.lss

📁 avr与PC机之间的通信
💻 LSS
📖 第 1 页 / 共 4 页
字号:

usb.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000b7c  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000060  00800060  00000b7c  00000c10  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          0000005c  008000c0  008000c0  00000c70  2**0
                  ALLOC
  3 .noinit       00000000  0080011c  0080011c  00000c70  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00000c70  2**0
                  CONTENTS
  5 .debug_aranges 00000014  00000000  00000000  00000c70  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_pubnames 000003f2  00000000  00000000  00000c84  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_info   00000e59  00000000  00000000  00001076  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_abbrev 00000228  00000000  00000000  00001ecf  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_line   00000a7c  00000000  00000000  000020f7  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_str    00000790  00000000  00000000  00002b73  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

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

00000054 <__ctors_end>:
  54:	11 24       	eor	r1, r1
  56:	1f be       	out	0x3f, r1	; 63
  58:	cf e5       	ldi	r28, 0x5F	; 95
  5a:	d4 e0       	ldi	r29, 0x04	; 4
  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:	ec e7       	ldi	r30, 0x7C	; 124
  68:	fb e0       	ldi	r31, 0x0B	; 11
  6a:	02 c0       	rjmp	.+4      	; 0x70

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

00000070 <.do_copy_data_start>:
  70:	a0 3c       	cpi	r26, 0xC0	; 192
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c

00000076 <__do_clear_bss>:
  76:	11 e0       	ldi	r17, 0x01	; 1
  78:	a0 ec       	ldi	r26, 0xC0	; 192
  7a:	b0 e0       	ldi	r27, 0x00	; 0
  7c:	01 c0       	rjmp	.+2      	; 0x80

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

00000080 <.do_clear_bss_start>:
  80:	ac 31       	cpi	r26, 0x1C	; 28
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e
  86:	0c 94 91 05 	jmp	0xb22

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

0000008e <delay1>:
	...
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
  a2:	08 95       	ret

000000a4 <outportb>:
}
/*void put_c(unsigned char c) //发送采用查询方式
{
	while( !(UCSRA & (1<<UDRE)) );
	UDR=c;
}*/
//this part from Epphal.c
void outportb(unsigned char Addr,unsigned char Data)
{	
  a4:	1f 93       	push	r17
  a6:	16 2f       	mov	r17, r22
	 PORTB |=(1<<D12_ALE); //SET ALE H
  a8:	c3 9a       	sbi	0x18, 3	; 24
	 DDRA=0xff;
  aa:	9f ef       	ldi	r25, 0xFF	; 255
  ac:	9a bb       	out	0x1a, r25	; 26
	 PORTA=Addr; //load address
  ae:	8b bb       	out	0x1b, r24	; 27
	 delay1();
  b0:	0e 94 47 00 	call	0x8e
	 PORTB &=~(1<<D12_ALE); //RESET ALE L
  b4:	c3 98       	cbi	0x18, 3	; 24
	 PORTA=Data;
  b6:	1b bb       	out	0x1b, r17	; 27
	 PORTB &=~(1<<D12_WR); //Enalbe write
  b8:	c1 98       	cbi	0x18, 1	; 24
	 delay1(); //waite some time 
  ba:	0e 94 47 00 	call	0x8e
	 delay1();
  be:	0e 94 47 00 	call	0x8e
	 PORTB |=(1<<D12_WR);
  c2:	c1 9a       	sbi	0x18, 1	; 24
  c4:	1f 91       	pop	r17
  c6:	08 95       	ret

000000c8 <inportb>:
}

unsigned char inportb(unsigned char Addr)
{
  c8:	1f 93       	push	r17
	unsigned char rt;
	 PORTB |=(1<<D12_ALE); //SET ALE H
  ca:	c3 9a       	sbi	0x18, 3	; 24
	 DDRA=0xff ;
  cc:	1f ef       	ldi	r17, 0xFF	; 255
  ce:	1a bb       	out	0x1a, r17	; 26
	
	 PORTA=Addr; //load address
  d0:	8b bb       	out	0x1b, r24	; 27
	 delay1();
  d2:	0e 94 47 00 	call	0x8e
	 PORTB &=~(1<<D12_ALE); //RESET ALE L
  d6:	c3 98       	cbi	0x18, 3	; 24
	 DDRA=0x00;
  d8:	1a ba       	out	0x1a, r1	; 26
	 PORTA=0xff;  //
  da:	1b bb       	out	0x1b, r17	; 27
	 PORTB &=~(1<<D12_RD);
  dc:	c2 98       	cbi	0x18, 2	; 24
	
	 delay1();
  de:	0e 94 47 00 	call	0x8e
	 rt=PINA;
  e2:	89 b3       	in	r24, 0x19	; 25
	 PORTB |=(1<<D12_RD);
  e4:	c2 9a       	sbi	0x18, 2	; 24
	return rt;
}
  e6:	99 27       	eor	r25, r25
  e8:	1f 91       	pop	r17
  ea:	08 95       	ret

000000ec <D12_SetAddressEnable>:


//this part from D12CI.C
/*设置/使能地址命令:D0H*/
void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)
{
  ec:	1f 93       	push	r17
  ee:	cf 93       	push	r28
  f0:	c8 2f       	mov	r28, r24
  f2:	16 2f       	mov	r17, r22
    if(bEPPflags.bits.in_isr == 0)
  f4:	80 91 c0 00 	lds	r24, 0x00C0
  f8:	84 fd       	sbrc	r24, 4
  fa:	01 c0       	rjmp	.+2      	; 0xfe
         DISABLE;//EA=0
  fc:	f8 94       	cli
    outportb(D12_COMMAND, 0xD0);
  fe:	60 ed       	ldi	r22, 0xD0	; 208
 100:	83 e0       	ldi	r24, 0x03	; 3
 102:	0e 94 52 00 	call	0xa4
	if(bEnable)
 106:	11 11       	cpse	r17, r1
		bAddress |= 0x80;
 108:	c0 68       	ori	r28, 0x80	; 128
	outportb(D12_DATA, bAddress);
 10a:	6c 2f       	mov	r22, r28
 10c:	82 e0       	ldi	r24, 0x02	; 2
 10e:	0e 94 52 00 	call	0xa4
	if(bEPPflags.bits.in_isr == 0)
 112:	80 91 c0 00 	lds	r24, 0x00C0
 116:	84 fd       	sbrc	r24, 4
 118:	01 c0       	rjmp	.+2      	; 0x11c
		ENABLE;//EA=1
 11a:	78 94       	sei
 11c:	cf 91       	pop	r28
 11e:	1f 91       	pop	r17
 120:	08 95       	ret

00000122 <D12_SetEndpointEnable>:
}

/*设置端点使能命令:D8H*/
void D12_SetEndpointEnable(unsigned char bEnable)
{
 122:	cf 93       	push	r28
 124:	c8 2f       	mov	r28, r24
	if(bEPPflags.bits.in_isr == 0)
 126:	80 91 c0 00 	lds	r24, 0x00C0
 12a:	84 fd       	sbrc	r24, 4
 12c:	01 c0       	rjmp	.+2      	; 0x130
		DISABLE;
 12e:	f8 94       	cli
	outportb(D12_COMMAND, 0xD8);
 130:	68 ed       	ldi	r22, 0xD8	; 216
 132:	83 e0       	ldi	r24, 0x03	; 3
 134:	0e 94 52 00 	call	0xa4
	if(bEnable)
 138:	cc 23       	and	r28, r28
 13a:	11 f0       	breq	.+4      	; 0x140
		outportb(D12_DATA, 1);
 13c:	61 e0       	ldi	r22, 0x01	; 1
 13e:	01 c0       	rjmp	.+2      	; 0x142
	else
		outportb(D12_DATA, 0);
 140:	6c 2f       	mov	r22, r28
 142:	82 e0       	ldi	r24, 0x02	; 2
 144:	0e 94 52 00 	call	0xa4
	if(bEPPflags.bits.in_isr == 0)
 148:	80 91 c0 00 	lds	r24, 0x00C0
 14c:	84 fd       	sbrc	r24, 4
 14e:	01 c0       	rjmp	.+2      	; 0x152
		ENABLE;
 150:	78 94       	sei
 152:	cf 91       	pop	r28
 154:	08 95       	ret

00000156 <D12_SetMode>:
}

/*设置模式命令:F3H*/
void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv)
{
 156:	1f 93       	push	r17
 158:	cf 93       	push	r28
 15a:	c8 2f       	mov	r28, r24
 15c:	16 2f       	mov	r17, r22
	if(bEPPflags.bits.in_isr == 0)
 15e:	80 91 c0 00 	lds	r24, 0x00C0
 162:	84 fd       	sbrc	r24, 4
 164:	01 c0       	rjmp	.+2      	; 0x168
		DISABLE;
 166:	f8 94       	cli
	outportb(D12_COMMAND, 0xF3);
 168:	63 ef       	ldi	r22, 0xF3	; 243
 16a:	83 e0       	ldi	r24, 0x03	; 3
 16c:	0e 94 52 00 	call	0xa4
	outportb(D12_DATA, bConfig);
 170:	6c 2f       	mov	r22, r28
 172:	82 e0       	ldi	r24, 0x02	; 2
 174:	0e 94 52 00 	call	0xa4
	outportb(D12_DATA, bClkDiv);
 178:	61 2f       	mov	r22, r17
 17a:	82 e0       	ldi	r24, 0x02	; 2
 17c:	0e 94 52 00 	call	0xa4
	if(bEPPflags.bits.in_isr == 0)
 180:	80 91 c0 00 	lds	r24, 0x00C0
 184:	84 fd       	sbrc	r24, 4
 186:	01 c0       	rjmp	.+2      	; 0x18a
		ENABLE;
 188:	78 94       	sei
 18a:	cf 91       	pop	r28
 18c:	1f 91       	pop	r17
 18e:	08 95       	ret

00000190 <D12_SetDMA>:
}

/*设置DMA命令:FBH*/
void D12_SetDMA(unsigned char bMode)
{
 190:	cf 93       	push	r28
 192:	c8 2f       	mov	r28, r24
	if(bEPPflags.bits.in_isr == 0)
 194:	80 91 c0 00 	lds	r24, 0x00C0
 198:	84 fd       	sbrc	r24, 4
 19a:	01 c0       	rjmp	.+2      	; 0x19e
		DISABLE;
 19c:	f8 94       	cli
	outportb(D12_COMMAND, 0xFB);
 19e:	6b ef       	ldi	r22, 0xFB	; 251
 1a0:	83 e0       	ldi	r24, 0x03	; 3
 1a2:	0e 94 52 00 	call	0xa4
	outportb(D12_DATA, bMode);
 1a6:	6c 2f       	mov	r22, r28
 1a8:	82 e0       	ldi	r24, 0x02	; 2
 1aa:	0e 94 52 00 	call	0xa4
	if(bEPPflags.bits.in_isr == 0)
 1ae:	80 91 c0 00 	lds	r24, 0x00C0
 1b2:	84 fd       	sbrc	r24, 4
 1b4:	01 c0       	rjmp	.+2      	; 0x1b8
		ENABLE;
 1b6:	78 94       	sei
 1b8:	cf 91       	pop	r28
 1ba:	08 95       	ret

000001bc <D12_ReadInterruptRegister>:
}

/*读中断寄存器命令:F4H*/
unsigned short D12_ReadInterruptRegister(void)
{
 1bc:	1f 93       	push	r17
	unsigned char b1;
	unsigned int j;
	outportb(D12_COMMAND, 0xF4);
 1be:	64 ef       	ldi	r22, 0xF4	; 244
 1c0:	83 e0       	ldi	r24, 0x03	; 3
 1c2:	0e 94 52 00 	call	0xa4
	b1 = inportb(D12_DATA);
 1c6:	82 e0       	ldi	r24, 0x02	; 2
 1c8:	0e 94 64 00 	call	0xc8
 1cc:	18 2f       	mov	r17, r24
	j = inportb(D12_DATA);
 1ce:	82 e0       	ldi	r24, 0x02	; 2
 1d0:	0e 94 64 00 	call	0xc8
 1d4:	99 27       	eor	r25, r25
	j <<= 8;
 1d6:	98 2f       	mov	r25, r24
 1d8:	88 27       	eor	r24, r24
	j += b1;
	return j;
}
 1da:	81 0f       	add	r24, r17
 1dc:	91 1d       	adc	r25, r1
 1de:	1f 91       	pop	r17
 1e0:	08 95       	ret

000001e2 <D12_SelectEndpoint>:

/*选择端点命令:00~05H*/
unsigned char D12_SelectEndpoint(unsigned char bEndp)
{
 1e2:	68 2f       	mov	r22, r24
	unsigned char c;
	if(bEPPflags.bits.in_isr == 0)
 1e4:	80 91 c0 00 	lds	r24, 0x00C0
 1e8:	84 fd       	sbrc	r24, 4
 1ea:	01 c0       	rjmp	.+2      	; 0x1ee
		DISABLE;
 1ec:	f8 94       	cli
	outportb(D12_COMMAND, bEndp);
 1ee:	83 e0       	ldi	r24, 0x03	; 3
 1f0:	0e 94 52 00 	call	0xa4
	c = inportb(D12_DATA);
 1f4:	82 e0       	ldi	r24, 0x02	; 2
 1f6:	0e 94 64 00 	call	0xc8
 1fa:	98 2f       	mov	r25, r24
	if(bEPPflags.bits.in_isr == 0)
 1fc:	80 91 c0 00 	lds	r24, 0x00C0
 200:	84 fd       	sbrc	r24, 4
 202:	01 c0       	rjmp	.+2      	; 0x206
		ENABLE;
 204:	78 94       	sei
	return c;
}
 206:	89 2f       	mov	r24, r25
 208:	99 27       	eor	r25, r25
 20a:	08 95       	ret

0000020c <D12_ReadLastTransactionStatus>:

/*读最后处理状态寄存器命令:40~45H*/
unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
{
	outportb(D12_COMMAND, 0x40 + bEndp);
 20c:	80 5c       	subi	r24, 0xC0	; 192
 20e:	68 2f       	mov	r22, r24
 210:	83 e0       	ldi	r24, 0x03	; 3
 212:	0e 94 52 00 	call	0xa4
	return inportb(D12_DATA);
 216:	82 e0       	ldi	r24, 0x02	; 2
 218:	0e 94 64 00 	call	0xc8
}
 21c:	99 27       	eor	r25, r25
 21e:	08 95       	ret

00000220 <D12_SetEndpointStatus>:


/*设置端点状态命令:40~45H*/
void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled) 
{
 220:	cf 93       	push	r28
 222:	98 2f       	mov	r25, r24
 224:	c6 2f       	mov	r28, r22
	if(bEPPflags.bits.in_isr == 0)
 226:	80 91 c0 00 	lds	r24, 0x00C0
 22a:	84 fd       	sbrc	r24, 4
 22c:	01 c0       	rjmp	.+2      	; 0x230
		DISABLE;
 22e:	f8 94       	cli
	outportb(D12_COMMAND, 0x40 + bEndp);
 230:	90 5c       	subi	r25, 0xC0	; 192
 232:	69 2f       	mov	r22, r25
 234:	83 e0       	ldi	r24, 0x03	; 3
 236:	0e 94 52 00 	call	0xa4
	outportb(D12_DATA, bStalled);
 23a:	6c 2f       	mov	r22, r28
 23c:	82 e0       	ldi	r24, 0x02	; 2
 23e:	0e 94 52 00 	call	0xa4
	if(bEPPflags.bits.in_isr == 0)
 242:	80 91 c0 00 	lds	r24, 0x00C0
 246:	84 fd       	sbrc	r24, 4
 248:	01 c0       	rjmp	.+2      	; 0x24c
		ENABLE;
 24a:	78 94       	sei
 24c:	cf 91       	pop	r28
 24e:	08 95       	ret

00000250 <D12_SetEndpointStatusIsr>:
}


/*设置端点状态命令:40~45H,专用于中断函数中*/
void D12_SetEndpointStatusIsr(unsigned char bEndp, unsigned char bStalled)
{
 250:	cf 93       	push	r28
 252:	98 2f       	mov	r25, r24
 254:	c6 2f       	mov	r28, r22
	if(bEPPflags.bits.in_isr == 0)
 256:	80 91 c0 00 	lds	r24, 0x00C0
 25a:	84 fd       	sbrc	r24, 4
 25c:	01 c0       	rjmp	.+2      	; 0x260
		DISABLE;
 25e:	f8 94       	cli
	outportb(D12_COMMAND, 0x40 + bEndp);
 260:	90 5c       	subi	r25, 0xC0	; 192
 262:	69 2f       	mov	r22, r25
 264:	83 e0       	ldi	r24, 0x03	; 3
 266:	0e 94 52 00 	call	0xa4
	outportb(D12_DATA, bStalled);
 26a:	6c 2f       	mov	r22, r28
 26c:	82 e0       	ldi	r24, 0x02	; 2
 26e:	0e 94 52 00 	call	0xa4
	if(bEPPflags.bits.in_isr == 0)
 272:	80 91 c0 00 	lds	r24, 0x00C0
 276:	84 fd       	sbrc	r24, 4
 278:	01 c0       	rjmp	.+2      	; 0x27c
		ENABLE;
 27a:	78 94       	sei
 27c:	cf 91       	pop	r28
 27e:	08 95       	ret

00000280 <D12_ReadEndpoint>:
}


/*读端点缓冲区同时清缓冲区,包含读缓冲区命令:F0H*/
/*以及清缓冲区命令:F2H*/
unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len,unsigned char * buf)
{
 280:	ff 92       	push	r15
 282:	0f 93       	push	r16
 284:	1f 93       	push	r17
 286:	cf 93       	push	r28
 288:	98 2f       	mov	r25, r24
 28a:	c6 2f       	mov	r28, r22
 28c:	8a 01       	movw	r16, r20
	unsigned char i, j;
	if(bEPPflags.bits.in_isr == 0)
 28e:	80 91 c0 00 	lds	r24, 0x00C0
 292:	84 fd       	sbrc	r24, 4
 294:	01 c0       	rjmp	.+2      	; 0x298
		DISABLE;
 296:	f8 94       	cli
	outportb(D12_COMMAND, endp);
 298:	69 2f       	mov	r22, r25
 29a:	83 e0       	ldi	r24, 0x03	; 3
 29c:	0e 94 52 00 	call	0xa4
	if((inportb(D12_DATA) & D12_FULLEMPTY) == 0) 
 2a0:	82 e0       	ldi	r24, 0x02	; 2
 2a2:	0e 94 64 00 	call	0xc8
 2a6:	80 fd       	sbrc	r24, 0
 2a8:	08 c0       	rjmp	.+16     	; 0x2ba
	{
		if(bEPPflags.bits.in_isr == 0)
 2aa:	80 91 c0 00 	lds	r24, 0x00C0
 2ae:	84 fd       	sbrc	r24, 4
 2b0:	01 c0       	rjmp	.+2      	; 0x2b4
			ENABLE;
 2b2:	78 94       	sei
		return 0;
 2b4:	80 e0       	ldi	r24, 0x00	; 0
 2b6:	90 e0       	ldi	r25, 0x00	; 0
 2b8:	24 c0       	rjmp	.+72     	; 0x302
	}
	outportb(D12_COMMAND, 0xF0);
 2ba:	60 ef       	ldi	r22, 0xF0	; 240
 2bc:	83 e0       	ldi	r24, 0x03	; 3
 2be:	0e 94 52 00 	call	0xa4
	j = inportb(D12_DATA);
 2c2:	82 e0       	ldi	r24, 0x02	; 2
 2c4:	0e 94 64 00 	call	0xc8
	j = inportb(D12_DATA);
 2c8:	82 e0       	ldi	r24, 0x02	; 2
 2ca:	0e 94 64 00 	call	0xc8
 2ce:	f8 2e       	mov	r15, r24
	if(j > len)
 2d0:	c8 17       	cp	r28, r24
 2d2:	08 f4       	brcc	.+2      	; 0x2d6
		j = len;
 2d4:	fc 2e       	mov	r15, r28
	for(i=0; i<j; i++)
 2d6:	ff 20       	and	r15, r15
 2d8:	49 f0       	breq	.+18     	; 0x2ec
 2da:	cf 2d       	mov	r28, r15
		*(buf+i) = inportb(D12_DATA);
 2dc:	82 e0       	ldi	r24, 0x02	; 2
 2de:	0e 94 64 00 	call	0xc8
 2e2:	f8 01       	movw	r30, r16

⌨️ 快捷键说明

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