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

📄 main.c.lss

📁 AVR单片机控制的PDIUSBD12原程序
💻 LSS
📖 第 1 页 / 共 5 页
字号:

main.c.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000cb8  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000080  00800060  00000cb8  00000d4c  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          0000005a  008000e0  008000e0  00000dcc  2**0
                  ALLOC
  3 .noinit       00000000  0080013a  0080013a  00000dcc  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00000dcc  2**0
                  CONTENTS
  5 .stab         000029a0  00000000  00000000  00000dcc  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      000019d5  00000000  00000000  0000376c  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54 <__ctors_end>
   4:	0c 94 78 00 	jmp	0xf0 <__vector_1>
   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:	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:	e8 eb       	ldi	r30, 0xB8	; 184
  68:	fc e0       	ldi	r31, 0x0C	; 12
  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:	a0 3e       	cpi	r26, 0xE0	; 224
  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:	a0 ee       	ldi	r26, 0xE0	; 224
  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:	aa 33       	cpi	r26, 0x3A	; 58
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0c 94 da 00 	jmp	0x1b4 <main>

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

0000008e <LED>:
#define MCU_D12_CS_1()	PORTB|=(1<<CS_N)
#define LEDon()			PORTB&=~(1<<PB1)
#define LEDoff()		PORTB|=(1<<PB1)
void LED(void)
{
  8e:	8f ef       	ldi	r24, 0xFF	; 255
	while(1)
	{
		PORTC=0xff;
  90:	85 bb       	out	0x15, r24	; 21
  92:	fe cf       	rjmp	.-4      	; 0x90 <LED+0x2>

00000094 <IO_Init>:
	}
}
void IO_Init(void)
{
	DDRB=(1<<CS_N)|(1<<RD_N)|(1<<WR_N)|(1<<RESET_N)|(1<<ALE);
  94:	88 ef       	ldi	r24, 0xF8	; 248
  96:	87 bb       	out	0x17, r24	; 23
	PORTB=(1<<CS_N)|(1<<RD_N)|(1<<WR_N)|(1<<RESET_N)|(1<<ALE);
  98:	88 bb       	out	0x18, r24	; 24
	DDRD=(0<<INT_N)|(1<<TXD232);
  9a:	82 e0       	ldi	r24, 0x02	; 2
  9c:	81 bb       	out	0x11, r24	; 17
	DDRC=0xff;
  9e:	8f ef       	ldi	r24, 0xFF	; 255
  a0:	84 bb       	out	0x14, r24	; 20
	PORTC=0;
  a2:	15 ba       	out	0x15, r1	; 21
  a4:	08 95       	ret

000000a6 <USART_Init>:
}
//USART初始化
void USART_Init(void)
{
    /*设置波特率*/
	UCSRA = 0x00;
  a6:	1b b8       	out	0x0b, r1	; 11
	//*接收器与发送器使能,接收结束中断使能*/
	UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
  a8:	88 e9       	ldi	r24, 0x98	; 152
  aa:	8a b9       	out	0x0a, r24	; 10
	/*设置帧格式:8个数据位,1个停止位,偶校验位*/
	UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)|(1<<UPM1);
  ac:	86 ea       	ldi	r24, 0xA6	; 166
  ae:	80 bd       	out	0x20, r24	; 32
	UBRRH =(F_IO/baud/16-1)/256;
  b0:	83 e0       	ldi	r24, 0x03	; 3
  b2:	80 bd       	out	0x20, r24	; 32
	UBRRL =(F_IO/baud/16-1)%256;
  b4:	80 e4       	ldi	r24, 0x40	; 64
  b6:	89 b9       	out	0x09, r24	; 9
  b8:	08 95       	ret

000000ba <put_c>:
}
//串口发送数据
void put_c(unsigned char cData) //发送采用查询方式
{
	while( !(UCSRA & (1<<UDRE)) );
  ba:	5d 9b       	sbis	0x0b, 5	; 11
  bc:	fe cf       	rjmp	.-4      	; 0xba <put_c>
	UDR=cData;
  be:	8c b9       	out	0x0c, r24	; 12
  c0:	08 95       	ret

000000c2 <put_s>:
}
void put_s(unsigned char *ptr)
{
  c2:	cf 93       	push	r28
  c4:	df 93       	push	r29
  c6:	ec 01       	movw	r28, r24
	while (*ptr)
	{
		put_c(*ptr++);
  c8:	88 81       	ld	r24, Y
  ca:	88 23       	and	r24, r24
  cc:	21 f0       	breq	.+8      	; 0xd6 <put_s+0x14>
  ce:	89 91       	ld	r24, Y+
  d0:	0e 94 5d 00 	call	0xba <put_c>
  d4:	f9 cf       	rjmp	.-14     	; 0xc8 <put_s+0x6>
	}
	put_c(0x0D);
  d6:	8d e0       	ldi	r24, 0x0D	; 13
  d8:	0e 94 5d 00 	call	0xba <put_c>
	put_c(0x0A);  //结尾发送回车换行
  dc:	8a e0       	ldi	r24, 0x0A	; 10
  de:	0e 94 5d 00 	call	0xba <put_c>
  e2:	df 91       	pop	r29
  e4:	cf 91       	pop	r28
  e6:	08 95       	ret

000000e8 <Inter_Init>:
}
//中断初始化
void Inter_Init(void)
{
	MCUCR=0;			//int0低电平中断
  e8:	15 be       	out	0x35, r1	; 53
	GICR=(1<<INT0);
  ea:	80 e4       	ldi	r24, 0x40	; 64
  ec:	8b bf       	out	0x3b, r24	; 59
  ee:	08 95       	ret

000000f0 <__vector_1>:
}
SIGNAL(SIG_INTERRUPT0)
{
  f0:	1f 92       	push	r1
  f2:	0f 92       	push	r0
  f4:	0f b6       	in	r0, 0x3f	; 63
  f6:	0f 92       	push	r0
  f8:	11 24       	eor	r1, r1
  fa:	2f 93       	push	r18
  fc:	3f 93       	push	r19
  fe:	4f 93       	push	r20
 100:	5f 93       	push	r21
 102:	6f 93       	push	r22
 104:	7f 93       	push	r23
 106:	8f 93       	push	r24
 108:	9f 93       	push	r25
 10a:	af 93       	push	r26
 10c:	bf 93       	push	r27
 10e:	ef 93       	push	r30
 110:	ff 93       	push	r31
	fn_usb_isr();
 112:	0e 94 c9 03 	call	0x792 <fn_usb_isr>
 116:	ff 91       	pop	r31
 118:	ef 91       	pop	r30
 11a:	bf 91       	pop	r27
 11c:	af 91       	pop	r26
 11e:	9f 91       	pop	r25
 120:	8f 91       	pop	r24
 122:	7f 91       	pop	r23
 124:	6f 91       	pop	r22
 126:	5f 91       	pop	r21
 128:	4f 91       	pop	r20
 12a:	3f 91       	pop	r19
 12c:	2f 91       	pop	r18
 12e:	0f 90       	pop	r0
 130:	0f be       	out	0x3f, r0	; 63
 132:	0f 90       	pop	r0
 134:	1f 90       	pop	r1
 136:	18 95       	reti

00000138 <disconnect_USB>:
}
void main(void)
{
	IO_Init();
	USART_Init();
	Inter_Init();
	bEPPflags.value=0;				//清除事件标志寄存器bEPPflags
	reconnect_USB();
	sei();
	while(1)
	{
		if (bEPPflags.bits.bus_reset)    						//总线复位处理
		{
		 	bEPPflags.bits.bus_reset = 0;						//清标志
		}   
		if (bEPPflags.bits.suspend)								//总线挂起处理
	    {
		    bEPPflags.bits.suspend= 0;							//清标志
		} 
		if (bEPPflags.bits.setup_packet)						//协议处理
		{
			bEPPflags.bits.setup_packet = 0;					//清标志
			control_handler();
		}
	}
}

//断开USB总线
void disconnect_USB(void)
{
	//初始化D12工作状态,断开Soft Connect上拉电阻
	D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
 138:	65 e4       	ldi	r22, 0x45	; 69
 13a:	82 e0       	ldi	r24, 0x02	; 2
 13c:	0e 94 4b 01 	call	0x296 <D12_SetMode>
 140:	08 95       	ret

00000142 <connect_USB>:
}
//连接USB总线
void connect_USB(void)
{
	DISABLE;
 142:	f8 94       	cli
	bEPPflags.value=0;				//清除事件标志
 144:	10 92 23 01 	sts	0x0123, r1
 148:	10 92 22 01 	sts	0x0122, r1
	ENABLE;
 14c:	78 94       	sei
	//初始化D12工作状态,接通Soft Connect上拉电阻
	D12_SetDMA(0); 
 14e:	80 e0       	ldi	r24, 0x00	; 0
 150:	0e 94 66 01 	call	0x2cc <D12_SetDMA>
	D12_SetMode(D12_NOLAZYCLOCK | D12_SOFTCONNECT,D12_SETTOONE | D12_CLOCK_12M );
 154:	65 e4       	ldi	r22, 0x45	; 69
 156:	82 e1       	ldi	r24, 0x12	; 18
 158:	0e 94 4b 01 	call	0x296 <D12_SetMode>
 15c:	08 95       	ret

0000015e <reconnect_USB>:

}
//重新连接到USB
void reconnect_USB(void)
{
	unsigned long clk_cnt;
	disconnect_USB();
 15e:	0e 94 9c 00 	call	0x138 <disconnect_USB>
 162:	8f e4       	ldi	r24, 0x4F	; 79
 164:	93 ec       	ldi	r25, 0xC3	; 195
 166:	a0 e0       	ldi	r26, 0x00	; 0
 168:	b0 e0       	ldi	r27, 0x00	; 0
	for(clk_cnt=0;clk_cnt<50000;clk_cnt++);
 16a:	c2 97       	sbiw	r24, 0x32	; 50
 16c:	a1 09       	sbc	r26, r1
 16e:	b1 09       	sbc	r27, r1
 170:	b7 ff       	sbrs	r27, 7
 172:	fb cf       	rjmp	.-10     	; 0x16a <reconnect_USB+0xc>
	connect_USB();
 174:	0e 94 a1 00 	call	0x142 <connect_USB>
 178:	08 95       	ret

0000017a <control_handler>:
}
//USB处理子程序
void control_handler(void)
{
	unsigned char type,req;
	type=ControlData.DeviceRequest.bmRequestType & USB_REQUSET_TYPE_MASK;
 17a:	80 91 24 01 	lds	r24, 0x0124
 17e:	80 76       	andi	r24, 0x60	; 96
	req=ControlData.DeviceRequest.bRequest & USB_REQUSET_MASK;
 180:	e0 91 25 01 	lds	r30, 0x0125
 184:	ef 70       	andi	r30, 0x0F	; 15
//	put_c(req);
	if(type == USB_STANDERD_REQUEST)
 186:	88 23       	and	r24, r24
 188:	31 f4       	brne	.+12     	; 0x196 <control_handler+0x1c>
		(*StandardDeviceRequest[req])();
 18a:	ff 27       	eor	r31, r31
 18c:	ee 0f       	add	r30, r30
 18e:	ff 1f       	adc	r31, r31
 190:	e0 56       	subi	r30, 0x60	; 96
 192:	ff 4f       	sbci	r31, 0xFF	; 255
 194:	07 c0       	rjmp	.+14     	; 0x1a4 <control_handler+0x2a>
	else
		if(type==USB_VENDOR_REQUEST)
 196:	80 34       	cpi	r24, 0x40	; 64
 198:	51 f4       	brne	.+20     	; 0x1ae <control_handler+0x34>
			(*VendorDeviceRequest[req])();
 19a:	ff 27       	eor	r31, r31
 19c:	ee 0f       	add	r30, r30
 19e:	ff 1f       	adc	r31, r31
 1a0:	e0 54       	subi	r30, 0x40	; 64
 1a2:	ff 4f       	sbci	r31, 0xFF	; 255
 1a4:	01 90       	ld	r0, Z+
 1a6:	f0 81       	ld	r31, Z
 1a8:	e0 2d       	mov	r30, r0
 1aa:	09 95       	icall
 1ac:	08 95       	ret
		else
			stall_ep0();
 1ae:	0e 94 aa 02 	call	0x554 <stall_ep0>
 1b2:	08 95       	ret

000001b4 <main>:
 1b4:	cf e5       	ldi	r28, 0x5F	; 95
 1b6:	d4 e0       	ldi	r29, 0x04	; 4
 1b8:	de bf       	out	0x3e, r29	; 62
 1ba:	cd bf       	out	0x3d, r28	; 61
 1bc:	0e 94 4a 00 	call	0x94 <IO_Init>
 1c0:	0e 94 53 00 	call	0xa6 <USART_Init>
 1c4:	0e 94 74 00 	call	0xe8 <Inter_Init>
 1c8:	10 92 23 01 	sts	0x0123, r1
 1cc:	10 92 22 01 	sts	0x0122, r1
 1d0:	0e 94 af 00 	call	0x15e <reconnect_USB>
 1d4:	78 94       	sei
 1d6:	80 91 22 01 	lds	r24, 0x0122
 1da:	81 ff       	sbrs	r24, 1
 1dc:	03 c0       	rjmp	.+6      	; 0x1e4 <main+0x30>
 1de:	8d 7f       	andi	r24, 0xFD	; 253
 1e0:	80 93 22 01 	sts	0x0122, r24
 1e4:	80 91 22 01 	lds	r24, 0x0122
 1e8:	82 ff       	sbrs	r24, 2
 1ea:	03 c0       	rjmp	.+6      	; 0x1f2 <main+0x3e>
 1ec:	8b 7f       	andi	r24, 0xFB	; 251
 1ee:	80 93 22 01 	sts	0x0122, r24
 1f2:	80 91 22 01 	lds	r24, 0x0122
 1f6:	83 ff       	sbrs	r24, 3
 1f8:	ee cf       	rjmp	.-36     	; 0x1d6 <main+0x22>
 1fa:	87 7f       	andi	r24, 0xF7	; 247
 1fc:	80 93 22 01 	sts	0x0122, r24
 200:	0e 94 bd 00 	call	0x17a <control_handler>
 204:	e8 cf       	rjmp	.-48     	; 0x1d6 <main+0x22>

⌨️ 快捷键说明

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