main.lss
来自「以NRF905芯片为核心的PTR8000模块的AVR驱动.驱动芯片为AVR me」· LSS 代码 · 共 1,032 行 · 第 1/3 页
LSS
1,032 行
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000352 00000000 00000000 00000074 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000010 00800060 00000352 000003c6 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000042 00800070 00000362 000003d6 2**0
ALLOC
3 .debug_aranges 00000060 00000000 00000000 000003d6 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_pubnames 0000018d 00000000 00000000 00000436 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_info 00000a84 00000000 00000000 000005c3 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_abbrev 000002cf 00000000 00000000 00001047 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_line 00000822 00000000 00000000 00001316 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_frame 00000120 00000000 00000000 00001b38 2**2
CONTENTS, READONLY, DEBUGGING
9 .debug_str 0000022c 00000000 00000000 00001c58 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_loc 000001dc 00000000 00000000 00001e84 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_ranges 00000018 00000000 00000000 00002060 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 2a 00 jmp 0x54 ; 0x54 <__ctors_end>
4: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
8: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
10: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
14: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
18: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
1c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
20: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
24: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
28: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
2c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
30: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
34: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
38: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
3c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
40: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
44: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
48: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
4c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
50: 0c 94 47 00 jmp 0x8e ; 0x8e <__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: e2 e5 ldi r30, 0x52 ; 82
68: f3 e0 ldi r31, 0x03 ; 3
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 37 cpi r26, 0x70 ; 112
72: b1 07 cpc r27, r17
74: d9 f7 brne .-10 ; 0x6c <.do_copy_data_loop>
00000076 <__do_clear_bss>:
76: 10 e0 ldi r17, 0x00 ; 0
78: a0 e7 ldi r26, 0x70 ; 112
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: a2 3b cpi r26, 0xB2 ; 178
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop>
86: 0e 94 49 00 call 0x92 ; 0x92 <main>
8a: 0c 94 a7 01 jmp 0x34e ; 0x34e <_exit>
0000008e <__bad_interrupt>:
8e: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
00000092 <main>:
#define FOSC 11059200UL
#define BAUD 19200UL
/* 接收端代码 */
int main(void)
{
92: 83 e2 ldi r24, 0x23 ; 35
94: 90 e0 ldi r25, 0x00 ; 0
96: 0e 94 68 00 call 0xd0 ; 0xd0 <usart_init>
//unsigned char i = 2;
usart_init( FOSC/(16*BAUD) - 1 );
SPI_Init();
9a: 0e 94 81 00 call 0x102 ; 0x102 <SPI_Init>
nRF905_Init(RX_ADDRESS);
9e: 60 e0 ldi r22, 0x00 ; 0
a0: 70 e0 ldi r23, 0x00 ; 0
a2: 80 e0 ldi r24, 0x00 ; 0
a4: 90 e0 ldi r25, 0x00 ; 0
a6: 0e 94 fe 00 call 0x1fc ; 0x1fc <nRF905_Init>
usart_transmit('g');
aa: 87 e6 ldi r24, 0x67 ; 103
ac: 0e 94 6f 00 call 0xde ; 0xde <usart_transmit>
while(1){
if( PIN_NRF905 & (1<<DR) )
b0: cd 9b sbis 0x19, 5 ; 25
b2: fe cf rjmp .-4 ; 0xb0 <main+0x1e>
{
nRF905_ReceivePacket();
b4: 0e 94 1e 01 call 0x23c ; 0x23c <nRF905_ReceivePacket>
//for(i=0; i<32; i++)usart_transmit(ReceiveBuffer[i]);
if(ReceiveBuffer[31]==31)
b8: 80 91 b1 00 lds r24, 0x00B1
bc: 8f 31 cpi r24, 0x1F ; 31
be: c1 f7 brne .-16 ; 0xb0 <main+0x1e>
{
fasong("小玲,我爱你!\r\n",16);
c0: 60 e1 ldi r22, 0x10 ; 16
c2: 80 e6 ldi r24, 0x60 ; 96
c4: 90 e0 ldi r25, 0x00 ; 0
c6: 0e 94 73 00 call 0xe6 ; 0xe6 <fasong>
ReceiveBuffer[31]=0;
ca: 10 92 b1 00 sts 0x00B1, r1
ce: f0 cf rjmp .-32 ; 0xb0 <main+0x1e>
000000d0 <usart_init>:
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
void usart_init(unsigned int baud)
{
d0: 90 bd out 0x20, r25 ; 32
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
d2: 89 b9 out 0x09, r24 ; 9
/* 接收器与发送器使能,接收中断使能*/
UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
d4: 88 ed ldi r24, 0xD8 ; 216
d6: 8a b9 out 0x0a, r24 ; 10
/* 设置帧格式: 8 个数据位, 2 个停止位*/
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
d8: 8e e8 ldi r24, 0x8E ; 142
da: 80 bd out 0x20, r24 ; 32
}
dc: 08 95 ret
000000de <usart_transmit>:
void usart_transmit(unsigned char data)
{
de: 5d 9b sbis 0x0b, 5 ; 11
e0: fe cf rjmp .-4 ; 0xde <usart_transmit>
/* 等待发送缓冲器为空 */
while( !(UCSRA & (1<<UDRE) ) )
;
/* 将数据放入发送缓冲器,发送数据 */
UDR = data;
e2: 8c b9 out 0x0c, r24 ; 12
}
e4: 08 95 ret
000000e6 <fasong>:
void fasong(unsigned char *p,unsigned char j)
{
e6: fc 01 movw r30, r24
e8: 06 c0 rjmp .+12 ; 0xf6 <fasong+0x10>
while(j--)usart_transmit(*p++);
ea: 80 81 ld r24, Z
}
void usart_transmit(unsigned char data)
{
/* 等待发送缓冲器为空 */
while( !(UCSRA & (1<<UDRE) ) )
ec: 5d 9b sbis 0x0b, 5 ; 11
ee: fe cf rjmp .-4 ; 0xec <fasong+0x6>
UDR = data;
}
void fasong(unsigned char *p,unsigned char j)
{
while(j--)usart_transmit(*p++);
f0: 31 96 adiw r30, 0x01 ; 1
{
/* 等待发送缓冲器为空 */
while( !(UCSRA & (1<<UDRE) ) )
;
/* 将数据放入发送缓冲器,发送数据 */
UDR = data;
f2: 8c b9 out 0x0c, r24 ; 12
f4: 61 50 subi r22, 0x01 ; 1
}
void fasong(unsigned char *p,unsigned char j)
{
while(j--)usart_transmit(*p++);
f6: 66 23 and r22, r22
f8: c1 f7 brne .-16 ; 0xea <fasong+0x4>
}
fa: 08 95 ret
000000fc <usart_receive>:
unsigned char usart_receive(void)
{
fc: 8b b1 in r24, 0x0b ; 11
/* 等待接收数据 */
while( !UCSRA & (1<<RXC) )
;
/* 从缓冲区中获取并返回数据 */
return UDR;
fe: 8c b1 in r24, 0x0c ; 12
}
100: 08 95 ret
00000102 <SPI_Init>:
unsigned char SendBuffer[BUF_SIZE]; // RF发送缓冲区
unsigned char ReceiveCount; // RF接收缓冲区接收个数
unsigned char SendCount; // RF发送缓冲区发送个数
void SPI_Init(void)
{
102: 88 b3 in r24, 0x18 ; 24
104: 80 6f ori r24, 0xF0 ; 240
106: 88 bb out 0x18, r24 ; 24
PORT_SPI |= (1<<MOSI)|(1<<MISO)|(1<<SCK)|(1<<SS); // 设置MOSI和SCK、SS为输出,其他为输入
DDR_SPI |= (1<<MOSI)|(1<<SCK)|(1<<SS);
108: 87 b3 in r24, 0x17 ; 23
10a: 80 6b ori r24, 0xB0 ; 176
10c: 87 bb out 0x17, r24 ; 23
SPCR = (1<<SPE)|(1<<MSTR)|(0<<CPOL)|(0<<SPR0); // 主机模式,fck/16, SPI方式0
10e: 80 e5 ldi r24, 0x50 ; 80
110: 8d b9 out 0x0d, r24 ; 13
}
112: 08 95 ret
00000114 <SPI_ReadWrite>:
unsigned char SPI_ReadWrite(unsigned char cData)
{
114: 8f b9 out 0x0f, r24 ; 15
SPDR = cData;
while(!(SPSR & (1<<SPIF) )) // 等待SPI发送完毕
116: 77 9b sbis 0x0e, 7 ; 14
118: fe cf rjmp .-4 ; 0x116 <SPI_ReadWrite+0x2>
;
return SPDR;
11a: 8f b1 in r24, 0x0f ; 15
}
11c: 08 95 ret
0000011e <nRF905_ReadStatus>:
ReceiveBuffer[i] = 0;
}
}
unsigned char nRF905_ReadStatus(void)
{
11e: c4 98 cbi 0x18, 4 ; 24
SPCR = (1<<SPE)|(1<<MSTR)|(0<<CPOL)|(0<<SPR0); // 主机模式,fck/16, SPI方式0
}
unsigned char SPI_ReadWrite(unsigned char cData)
{
SPDR = cData;
120: 80 e1 ldi r24, 0x10 ; 16
122: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR & (1<<SPIF) )) // 等待SPI发送完毕
124: 77 9b sbis 0x0e, 7 ; 14
126: fe cf rjmp .-4 ; 0x124 <nRF905_ReadStatus+0x6>
;
return SPDR;
128: 8f b1 in r24, 0x0f ; 15
{
unsigned char val;
CLR_SS(); // 打开SPI
val = SPI_ReadWrite(RC); // 读状态
SET_SS(); // 关闭SPI
12a: c4 9a sbi 0x18, 4 ; 24
return val;
}
12c: 08 95 ret
0000012e <nRF905_SetSendMode>:
void nRF905_SetSendMode(void)
{
12e: 8c ec ldi r24, 0xCC ; 204
130: 9a e0 ldi r25, 0x0A ; 10
132: fc 01 movw r30, r24
134: 31 97 sbiw r30, 0x01 ; 1
136: f1 f7 brne .-4 ; 0x134 <nRF905_SetSendMode+0x6>
_delay_ms(1);
SET_TX_EN(); // 设置为发送模式
138: d8 9a sbi 0x1b, 0 ; 27
milliseconds can be achieved.
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
13a: fc 01 movw r30, r24
13c: 31 97 sbiw r30, 0x01 ; 1
13e: f1 f7 brne .-4 ; 0x13c <nRF905_SetSendMode+0xe>
asm("nop");
asm("nop");
asm("nop");
asm("nop");*/
_delay_ms(1);
CLR_TRX_CE(); // 待机PORTD &= ~(1<<TRX_CE);
140: d9 98 cbi 0x1b, 1 ; 27
142: 01 97 sbiw r24, 0x01 ; 1
144: f1 f7 brne .-4 ; 0x142 <nRF905_SetSendMode+0x14>
_delay_ms(1);
}
146: 08 95 ret
00000148 <nRF905_SetReceiveMode>:
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?