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

📄 main.lss

📁 本程序是NRF950的程序,主要包括发送和接受程序,希望能对大家有帮助
💻 LSS
📖 第 1 页 / 共 2 页
字号:

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 + -