?? main.lss
字號:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000037c 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 0000000e 00800060 0000037c 00000410 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 0000004b 0080006e 0080006e 0000041e 2**0
ALLOC
3 .noinit 00000000 008000b9 008000b9 0000041e 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 0000041e 2**0
CONTENTS
5 .debug_aranges 00000014 00000000 00000000 0000041e 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_pubnames 00000206 00000000 00000000 00000432 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_info 00000514 00000000 00000000 00000638 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_abbrev 00000150 00000000 00000000 00000b4c 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_line 00000498 00000000 00000000 00000c9c 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_str 0000024a 00000000 00000000 00001134 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 12 c0 rjmp .+36 ; 0x26
2: 59 c1 rjmp .+690 ; 0x2b6
4: 2a c0 rjmp .+84 ; 0x5a
6: 29 c0 rjmp .+82 ; 0x5a
8: 28 c0 rjmp .+80 ; 0x5a
a: 27 c0 rjmp .+78 ; 0x5a
c: 26 c0 rjmp .+76 ; 0x5a
e: 25 c0 rjmp .+74 ; 0x5a
10: 24 c0 rjmp .+72 ; 0x5a
12: 23 c0 rjmp .+70 ; 0x5a
14: 22 c0 rjmp .+68 ; 0x5a
16: 44 c0 rjmp .+136 ; 0xa0
18: 20 c0 rjmp .+64 ; 0x5a
1a: 1f c0 rjmp .+62 ; 0x5a
1c: 1e c0 rjmp .+60 ; 0x5a
1e: 1d c0 rjmp .+58 ; 0x5a
20: 1c c0 rjmp .+56 ; 0x5a
22: 1b c0 rjmp .+54 ; 0x5a
24: 1a c0 rjmp .+52 ; 0x5a
00000026 <__ctors_end>:
26: 11 24 eor r1, r1
28: 1f be out 0x3f, r1 ; 63
2a: cf e5 ldi r28, 0x5F ; 95
2c: d4 e0 ldi r29, 0x04 ; 4
2e: de bf out 0x3e, r29 ; 62
30: cd bf out 0x3d, r28 ; 61
00000032 <__do_copy_data>:
32: 10 e0 ldi r17, 0x00 ; 0
34: a0 e6 ldi r26, 0x60 ; 96
36: b0 e0 ldi r27, 0x00 ; 0
38: ec e7 ldi r30, 0x7C ; 124
3a: f3 e0 ldi r31, 0x03 ; 3
3c: 02 c0 rjmp .+4 ; 0x42
0000003e <.do_copy_data_loop>:
3e: 05 90 lpm r0, Z+
40: 0d 92 st X+, r0
00000042 <.do_copy_data_start>:
42: ae 36 cpi r26, 0x6E ; 110
44: b1 07 cpc r27, r17
46: d9 f7 brne .-10 ; 0x3e
00000048 <__do_clear_bss>:
48: 10 e0 ldi r17, 0x00 ; 0
4a: ae e6 ldi r26, 0x6E ; 110
4c: b0 e0 ldi r27, 0x00 ; 0
4e: 01 c0 rjmp .+2 ; 0x52
00000050 <.do_clear_bss_loop>:
50: 1d 92 st X+, r1
00000052 <.do_clear_bss_start>:
52: a9 3b cpi r26, 0xB9 ; 185
54: b1 07 cpc r27, r17
56: e1 f7 brne .-8 ; 0x50
58: 55 c1 rjmp .+682 ; 0x304
0000005a <__bad_interrupt>:
5a: d2 cf rjmp .-92 ; 0x0
0000005c <port_init>:
{
//所有端口設為輸入,所有端口的上拉電阻有效
//所有端口輸出為高電平
// PortB
PORTB = 0xff;
5c: 8f ef ldi r24, 0xFF ; 255
5e: 88 bb out 0x18, r24 ; 24
DDRB = 0x00;
60: 17 ba out 0x17, r1 ; 23
// PortC
PORTC = 0xff;
62: 85 bb out 0x15, r24 ; 21
DDRC = 0x00;
64: 14 ba out 0x14, r1 ; 20
// PortD
PORTD = 0xff;
66: 82 bb out 0x12, r24 ; 18
DDRD = 0x00;
68: 11 ba out 0x11, r1 ; 17
6a: 08 95 ret
0000006c <uart_init>:
}
/*---------------UART0初始化----------------*/
void uart_init(void)
{
UCSRB = 0x00; //disable while setting baud rate
6c: 1a b8 out 0x0a, r1 ; 10
UCSRA = 0x00;
6e: 1b b8 out 0x0b, r1 ; 11
UCSRC = (1<<URSEL )| 0x06; //URSEL=1時才能寫UCSRC,8位
70: 86 e8 ldi r24, 0x86 ; 134
72: 80 bd out 0x20, r24 ; 32
UBRRL=(fosc/16/(baud+1))%256;
74: 8f e2 ldi r24, 0x2F ; 47
76: 89 b9 out 0x09, r24 ; 9
UBRRH=(fosc/16/(baud+1))/256;
78: 10 bc out 0x20, r1 ; 32
UCSRB = 0x18; //允許接收,允許發送。
7a: 88 e1 ldi r24, 0x18 ; 24
7c: 8a b9 out 0x0a, r24 ; 10
7e: 08 95 ret
00000080 <SPI_MasterInit>:
//UCSRB = 0x98; //允許串口接收中斷,允許接收,允許發送。
}
void SPI_MasterInit(void)
{
/* 設置MOSI 和SCK SS為輸出,其他為輸入 */
DDRB |= (1<<PB5)|(1<<PB3)|(1<<PB2);
80: 87 b3 in r24, 0x17 ; 23
82: 8c 62 ori r24, 0x2C ; 44
84: 87 bb out 0x17, r24 ; 23
/* 使能SPI 主機模式,設置時鐘速率為fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
86: 81 e5 ldi r24, 0x51 ; 81
88: 8d b9 out 0x0d, r24 ; 13
8a: 08 95 ret
0000008c <SPI_transmit>:
}
void SPI_transmit(char cData)
{
/* 啟動數據傳輸 */
SPDR = cData;
8c: 8f b9 out 0x0f, r24 ; 15
/* 等待傳輸結束 */
while(!(SPSR & (1<<SPIF)))
8e: 77 9b sbis 0x0e, 7 ; 14
90: fe cf rjmp .-4 ; 0x8e
92: 08 95 ret
00000094 <SPI_receive>:
;
}
unsigned char SPI_receive(void)
{
/* 啟動數據傳輸 */
SPDR = 0x00;
94: 1f b8 out 0x0f, r1 ; 15
/* 等待傳輸結束 */
while(!(SPSR & (1<<SPIF)))
96: 77 9b sbis 0x0e, 7 ; 14
98: fe cf rjmp .-4 ; 0x96
;
return SPDR;
9a: 8f b1 in r24, 0x0f ; 15
}
9c: 99 27 eor r25, r25
9e: 08 95 ret
000000a0 <__vector_11>:
//串口接收完成中斷程序
SIGNAL(SIG_UART_RECV)
{
a0: 1f 92 push r1
a2: 0f 92 push r0
a4: 0f b6 in r0, 0x3f ; 63
a6: 0f 92 push r0
a8: 11 24 eor r1, r1
aa: 0f 90 pop r0
ac: 0f be out 0x3f, r0 ; 63
ae: 0f 90 pop r0
b0: 1f 90 pop r1
b2: 18 95 reti
000000b4 <put1char>:
}
//===============================================
//串口函數
//===============================================
/*---------------字符輸出函數---------------*/
void put1char(unsigned char c)
{
while (!(UCSRA&(1<<UDRE)));
b4: 5d 9b sbis 0x0b, 5 ; 11
b6: fe cf rjmp .-4 ; 0xb4
UDR=c;
b8: 8c b9 out 0x0c, r24 ; 12
ba: 08 95 ret
000000bc <get1char>:
}
/*---------------字符輸入函數---------------*/
unsigned char get1char(void)
{
while (!(UCSRA&(1<<RXC)));
bc: 5f 9b sbis 0x0b, 7 ; 11
be: fe cf rjmp .-4 ; 0xbc
return UDR;
c0: 8c b1 in r24, 0x0c ; 12
}
c2: 99 27 eor r25, r25
c4: 08 95 ret
000000c6 <puts>:
/*---------------字符串輸出函數-------------*/
int puts(char *s)
{
c6: cf 93 push r28
c8: df 93 push r29
ca: ec 01 movw r28, r24
while (*s)
{
put1char(*s);
s++;
cc: 88 81 ld r24, Y
ce: 88 23 and r24, r24
d0: 19 f0 breq .+6 ; 0xd8
d2: 89 91 ld r24, Y+
d4: ef df rcall .-34 ; 0xb4
d6: fa cf rjmp .-12 ; 0xcc
}
put1char(0x0a);//回車換行
d8: 8a e0 ldi r24, 0x0A ; 10
da: ec df rcall .-40 ; 0xb4
put1char(0x0d);
dc: 8d e0 ldi r24, 0x0D ; 13
de: ea df rcall .-44 ; 0xb4
return 1;
}
e0: 81 e0 ldi r24, 0x01 ; 1
e2: 90 e0 ldi r25, 0x00 ; 0
e4: df 91 pop r29
e6: cf 91 pop r28
e8: 08 95 ret
000000ea <putstr>:
/*---------不含回車換行的字符串輸出函數----*/
void putstr(char *s)
{
ea: cf 93 push r28
ec: df 93 push r29
ee: ec 01 movw r28, r24
while (*s)
{
put1char(*s);
s++;
f0: 88 81 ld r24, Y
f2: 88 23 and r24, r24
f4: 29 f0 breq .+10 ; 0x100
f6: 89 91 ld r24, Y+
f8: dd df rcall .-70 ; 0xb4
fa: 88 81 ld r24, Y
fc: 88 23 and r24, r24
fe: d9 f7 brne .-10 ; 0xf6
100: df 91 pop r29
102: cf 91 pop r28
104: 08 95 ret
00000106 <delay_1us>:
...
}
}
//===============================================
//延時函數
//===============================================
//1us延時函數
void delay_1us(void)
{
asm( "nop" ); //4m時為1us,8m時為0.125us,16m時為0.25us.
asm( "nop" );
asm( "nop" );
asm( "nop" );
asm( "nop" ); //4m時為1us,8m時為0.125us,16m時為0.25us.
asm( "nop" );
asm( "nop" );
asm( "nop" );
116: 08 95 ret
00000118 <delay_nus>:
}
//n us 延時函數
void delay_nus(unsigned int n)
{
118: cf 93 push r28
11a: df 93 push r29
unsigned int i;
for(i=0;i<n;i++)delay_1us();
11c: 00 97 sbiw r24, 0x00 ; 0
11e: 21 f0 breq .+8 ; 0x128
120: ec 01 movw r28, r24
122: f1 df rcall .-30 ; 0x106
124: 21 97 sbiw r28, 0x01 ; 1
126: e9 f7 brne .-6 ; 0x122
128: df 91 pop r29
12a: cf 91 pop r28
12c: 08 95 ret
0000012e <delay_1ms>:
}
//1ms延時函數
void delay_1ms(void)
{
12e: cf 93 push r28
130: df 93 push r29
132: c7 e5 ldi r28, 0x57 ; 87
134: d2 e0 ldi r29, 0x02 ; 2
unsigned int i;
for(i=0;i<600;i++) delay_1us();
136: e7 df rcall .-50 ; 0x106
138: 21 97 sbiw r28, 0x01 ; 1
13a: d7 ff sbrs r29, 7
13c: fc cf rjmp .-8 ; 0x136
13e: df 91 pop r29
140: cf 91 pop r28
142: 08 95 ret
00000144 <delay_nms>:
}
//n ms延時函數
void delay_nms(unsigned int n)
{
144: cf 93 push r28
146: df 93 push r29
unsigned int i;
for(i=0;i<n;i++)delay_1ms();
148: 00 97 sbiw r24, 0x00 ; 0
14a: 21 f0 breq .+8 ; 0x154
14c: ec 01 movw r28, r24
14e: ef df rcall .-34 ; 0x12e
150: 21 97 sbiw r28, 0x01 ; 1
152: e9 f7 brne .-6 ; 0x14e
154: df 91 pop r29
156: cf 91 pop r28
158: 08 95 ret
0000015a <write_tx_address>:
}
//======================================================
//以下是有關NRF905的函數
//======================================================
//寫TX地址4個字節
void write_tx_address(unsigned char tx_address_bytes_num)
{
15a: 1f 93 push r17
15c: cf 93 push r28
15e: c8 2f mov r28, r24
unsigned char i;
CONTROL_PORT &= ~(1<<CSN);
160: 94 98 cbi 0x12, 4 ; 18
SPI_transmit(0x22);//0b00100010
162: 82 e2 ldi r24, 0x22 ; 34
164: 93 df rcall .-218 ; 0x8c
i=0;
166: 10 e0 ldi r17, 0x00 ; 0
while(tx_address_bytes_num--)
{
SPI_transmit(tx_address_reg_buf[i]);
i++;
168: c1 50 subi r28, 0x01 ; 1
16a: cf 3f cpi r28, 0xFF ; 255
16c: 41 f0 breq .+16 ; 0x17e
16e: e1 2f mov r30, r17
170: ff 27 eor r31, r31
172: e6 59 subi r30, 0x96 ; 150
174: ff 4f sbci r31, 0xFF ; 255
176: 80 81 ld r24, Z
178: 89 df rcall .-238 ; 0x8c
17a: 1f 5f subi r17, 0xFF ; 255
17c: f5 cf rjmp .-22 ; 0x168
}
CONTROL_PORT |= (1<<CSN);
17e: 94 9a sbi 0x12, 4 ; 18
180: cf 91 pop r28
182: 1f 91 pop r17
184: 08 95 ret
00000186 <write_tx_payload>:
}
//寫TX有效數據32個字節
void write_tx_payload(unsigned char tx_payload_bytes_num)
{
186: 1f 93 push r17
188: cf 93 push r28
18a: c8 2f mov r28, r24
unsigned char i=0;
18c: 10 e0 ldi r17, 0x00 ; 0
CONTROL_PORT &= ~(1<<CSN);
18e: 94 98 cbi 0x12, 4 ; 18
SPI_transmit(0x20);//0b00100000
190: 80 e2 ldi r24, 0x20 ; 32
192: 7c df rcall .-264 ; 0x8c
while(tx_payload_bytes_num--)
{
SPI_transmit(tx_data_buf[i]);
i++;
194: c1 50 subi r28, 0x01 ; 1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -