main.lss

来自「以NRF905芯片为核心的PTR8000模块的AVR驱动.驱动芯片为AVR me」· LSS 代码 · 共 947 行 · 第 1/3 页

LSS
947
字号
	_delay_ms(1);
}
 142:	08 95       	ret

00000144 <nRF905_SendStart>:

void nRF905_SendStart(void)
{
 144:	d9 9a       	sbi	0x1b, 1	; 27
 146:	80 e0       	ldi	r24, 0x00	; 0
 148:	9c e6       	ldi	r25, 0x6C	; 108
 14a:	01 97       	sbiw	r24, 0x01	; 1
 14c:	f1 f7       	brne	.-4      	; 0x14a <nRF905_SendStart+0x6>
	SET_TRX_CE();		// 开始发送
	_delay_ms(10);		// while(DR!=1);
	CLR_TRX_CE();		// 待机模式
 14e:	d9 98       	cbi	0x1b, 1	; 27
}
 150:	08 95       	ret

00000152 <nRF905_SetConfig>:

void nRF905_SetConfig(unsigned long nRFAddr)	//配置nRF905
{
 152:	9b 01       	movw	r18, r22
 154:	ac 01       	movw	r20, r24
	CLR_TRX_CE();				//设置nRF905为待机方式
 156:	d9 98       	cbi	0x1b, 1	; 27
	asm("nop");
 158:	00 00       	nop
	CLR_SS();					//打开SPI
 15a:	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;
 15c:	1f b8       	out	0x0f, r1	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 15e:	77 9b       	sbis	0x0e, 7	; 14
 160:	fe cf       	rjmp	.-4      	; 0x15e <nRF905_SetConfig+0xc>
	return SPDR;
 162:	8f b1       	in	r24, 0x0f	; 15
	SPCR   = (1<<SPE)|(1<<MSTR)|(0<<CPOL)|(0<<SPR0);   // 主机模式,fck/16, SPI方式0
}

unsigned char SPI_ReadWrite(unsigned char cData)
{
	SPDR = cData;
 164:	8a e6       	ldi	r24, 0x6A	; 106
 166:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 168:	77 9b       	sbis	0x0e, 7	; 14
 16a:	fe cf       	rjmp	.-4      	; 0x168 <nRF905_SetConfig+0x16>
	return SPDR;
 16c:	8f b1       	in	r24, 0x0f	; 15
	SPCR   = (1<<SPE)|(1<<MSTR)|(0<<CPOL)|(0<<SPR0);   // 主机模式,fck/16, SPI方式0
}

unsigned char SPI_ReadWrite(unsigned char cData)
{
	SPDR = cData;
 16e:	8c e0       	ldi	r24, 0x0C	; 12
 170:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 172:	77 9b       	sbis	0x0e, 7	; 14
 174:	fe cf       	rjmp	.-4      	; 0x172 <nRF905_SetConfig+0x20>
	return SPDR;
 176:	8f b1       	in	r24, 0x0f	; 15
	SPCR   = (1<<SPE)|(1<<MSTR)|(0<<CPOL)|(0<<SPR0);   // 主机模式,fck/16, SPI方式0
}

unsigned char SPI_ReadWrite(unsigned char cData)
{
	SPDR = cData;
 178:	84 e4       	ldi	r24, 0x44	; 68
 17a:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 17c:	77 9b       	sbis	0x0e, 7	; 14
 17e:	fe cf       	rjmp	.-4      	; 0x17c <nRF905_SetConfig+0x2a>
	return SPDR;
 180:	8f b1       	in	r24, 0x0f	; 15
	SPCR   = (1<<SPE)|(1<<MSTR)|(0<<CPOL)|(0<<SPR0);   // 主机模式,fck/16, SPI方式0
}

unsigned char SPI_ReadWrite(unsigned char cData)
{
	SPDR = cData;
 182:	80 e2       	ldi	r24, 0x20	; 32
 184:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 186:	77 9b       	sbis	0x0e, 7	; 14
 188:	fe cf       	rjmp	.-4      	; 0x186 <nRF905_SetConfig+0x34>
	return SPDR;
 18a:	8f b1       	in	r24, 0x0f	; 15
	SPCR   = (1<<SPE)|(1<<MSTR)|(0<<CPOL)|(0<<SPR0);   // 主机模式,fck/16, SPI方式0
}

unsigned char SPI_ReadWrite(unsigned char cData)
{
	SPDR = cData;
 18c:	80 e2       	ldi	r24, 0x20	; 32
 18e:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 190:	77 9b       	sbis	0x0e, 7	; 14
 192:	fe cf       	rjmp	.-4      	; 0x190 <nRF905_SetConfig+0x3e>
	return SPDR;
 194:	8f b1       	in	r24, 0x0f	; 15
	SPI_ReadWrite(CH_NO_BYTE);						// 中心频率低8位
	SPI_ReadWrite(PA_PWR_10dBm | HFREQ_PLL_433MHz);	// 发射+10dBm,发射频率433MHz,中心频率第9位=0
	SPI_ReadWrite(TX_AFW_4BYTE | RX_AFW_4BYTE);		// 接收地址宽度4字节,发送地址宽度4字节  0100 0100
	SPI_ReadWrite(RX_PW_32BYTE);					// 接收数据宽度32字节
	SPI_ReadWrite(TX_PW_32BYTE);					// 发送数据宽度32字节
	SPI_ReadWrite((nRFAddr >> 24));				// 接收有效地址第1字节
 196:	85 2f       	mov	r24, r21
 198:	99 27       	eor	r25, r25
 19a:	aa 27       	eor	r26, r26
 19c:	bb 27       	eor	r27, r27
	SPCR   = (1<<SPE)|(1<<MSTR)|(0<<CPOL)|(0<<SPR0);   // 主机模式,fck/16, SPI方式0
}

unsigned char SPI_ReadWrite(unsigned char cData)
{
	SPDR = cData;
 19e:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 1a0:	77 9b       	sbis	0x0e, 7	; 14
 1a2:	fe cf       	rjmp	.-4      	; 0x1a0 <nRF905_SetConfig+0x4e>
	return SPDR;
 1a4:	8f b1       	in	r24, 0x0f	; 15
	SPI_ReadWrite(PA_PWR_10dBm | HFREQ_PLL_433MHz);	// 发射+10dBm,发射频率433MHz,中心频率第9位=0
	SPI_ReadWrite(TX_AFW_4BYTE | RX_AFW_4BYTE);		// 接收地址宽度4字节,发送地址宽度4字节  0100 0100
	SPI_ReadWrite(RX_PW_32BYTE);					// 接收数据宽度32字节
	SPI_ReadWrite(TX_PW_32BYTE);					// 发送数据宽度32字节
	SPI_ReadWrite((nRFAddr >> 24));				// 接收有效地址第1字节
	SPI_ReadWrite((nRFAddr >> 16) & 0xff);			// 接收有效地址第2字节
 1a6:	ca 01       	movw	r24, r20
 1a8:	aa 27       	eor	r26, r26
 1aa:	bb 27       	eor	r27, r27
	SPCR   = (1<<SPE)|(1<<MSTR)|(0<<CPOL)|(0<<SPR0);   // 主机模式,fck/16, SPI方式0
}

unsigned char SPI_ReadWrite(unsigned char cData)
{
	SPDR = cData;
 1ac:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 1ae:	77 9b       	sbis	0x0e, 7	; 14
 1b0:	fe cf       	rjmp	.-4      	; 0x1ae <nRF905_SetConfig+0x5c>
	return SPDR;
 1b2:	8f b1       	in	r24, 0x0f	; 15
	SPI_ReadWrite(TX_AFW_4BYTE | RX_AFW_4BYTE);		// 接收地址宽度4字节,发送地址宽度4字节  0100 0100
	SPI_ReadWrite(RX_PW_32BYTE);					// 接收数据宽度32字节
	SPI_ReadWrite(TX_PW_32BYTE);					// 发送数据宽度32字节
	SPI_ReadWrite((nRFAddr >> 24));				// 接收有效地址第1字节
	SPI_ReadWrite((nRFAddr >> 16) & 0xff);			// 接收有效地址第2字节
	SPI_ReadWrite((nRFAddr >> 8) & 0xff);			// 接收有效地址第3字节
 1b4:	bb 27       	eor	r27, r27
 1b6:	a5 2f       	mov	r26, r21
 1b8:	94 2f       	mov	r25, r20
 1ba:	83 2f       	mov	r24, r19
	SPCR   = (1<<SPE)|(1<<MSTR)|(0<<CPOL)|(0<<SPR0);   // 主机模式,fck/16, SPI方式0
}

unsigned char SPI_ReadWrite(unsigned char cData)
{
	SPDR = cData;
 1bc:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 1be:	77 9b       	sbis	0x0e, 7	; 14
 1c0:	fe cf       	rjmp	.-4      	; 0x1be <nRF905_SetConfig+0x6c>
	return SPDR;
 1c2:	8f b1       	in	r24, 0x0f	; 15
	SPCR   = (1<<SPE)|(1<<MSTR)|(0<<CPOL)|(0<<SPR0);   // 主机模式,fck/16, SPI方式0
}

unsigned char SPI_ReadWrite(unsigned char cData)
{
	SPDR = cData;
 1c4:	2f b9       	out	0x0f, r18	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 1c6:	77 9b       	sbis	0x0e, 7	; 14
 1c8:	fe cf       	rjmp	.-4      	; 0x1c6 <nRF905_SetConfig+0x74>
	return SPDR;
 1ca:	8f b1       	in	r24, 0x0f	; 15
	SPCR   = (1<<SPE)|(1<<MSTR)|(0<<CPOL)|(0<<SPR0);   // 主机模式,fck/16, SPI方式0
}

unsigned char SPI_ReadWrite(unsigned char cData)
{
	SPDR = cData;
 1cc:	88 ed       	ldi	r24, 0xD8	; 216
 1ce:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 1d0:	77 9b       	sbis	0x0e, 7	; 14
 1d2:	fe cf       	rjmp	.-4      	; 0x1d0 <nRF905_SetConfig+0x7e>
	return SPDR;
 1d4:	8f b1       	in	r24, 0x0f	; 15
	SPI_ReadWrite((nRFAddr >> 24));				// 接收有效地址第1字节
	SPI_ReadWrite((nRFAddr >> 16) & 0xff);			// 接收有效地址第2字节
	SPI_ReadWrite((nRFAddr >> 8) & 0xff);			// 接收有效地址第3字节
	SPI_ReadWrite(nRFAddr & 0xff);					// 接收有效地址第4字节  
	SPI_ReadWrite(CRC16_EN | XOF_16MHz);			// CRC16模式使能,晶体振荡器频率16MHz
	SET_SS();										// 关闭SPI
 1d6:	c4 9a       	sbi	0x18, 4	; 24
	if ( PORT_NRF905 & (1 << TX_EN) )		//再回到原来的无线收发模式
 1d8:	d8 9b       	sbis	0x1b, 0	; 27
 1da:	02 c0       	rjmp	.+4      	; 0x1e0 <nRF905_SetConfig+0x8e>
	{
		CLR_TRX_CE();				//设置nRF905为待机方式
 1dc:	d9 98       	cbi	0x1b, 1	; 27
 1de:	08 95       	ret
	}
	else SET_TRX_CE();				//设置nRF905为工作方式
 1e0:	d9 9a       	sbi	0x1b, 1	; 27
 1e2:	08 95       	ret

000001e4 <nRF905_Init>:
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
	return SPDR;
}

void nRF905_Init(unsigned long nRF_rxaddr)
{
 1e4:	2a b3       	in	r18, 0x1a	; 26
 1e6:	27 60       	ori	r18, 0x07	; 7
 1e8:	2a bb       	out	0x1a, r18	; 26
	unsigned char i;
	DDR_NRF905 |= ((1<<TX_EN)|(1<<TRX_CE)|(1<<PWR_UP)|(0<<DR)|(0<<AM)|(0<<CD));
	PORT_NRF905 |= ((0<<TX_EN)|(0<<TRX_CE)|(1<<PWR_UP)|(1<<DR)|(1<<AM)|(1<<CD));
 1ea:	2b b3       	in	r18, 0x1b	; 27
 1ec:	2c 63       	ori	r18, 0x3C	; 60
 1ee:	2b bb       	out	0x1b, r18	; 27
	nRF905_SetConfig(nRF_rxaddr);		// 初始化nRF905,并设置接收地址
 1f0:	0e 94 a9 00 	call	0x152	; 0x152 <nRF905_SetConfig>
	_delay_ms(1);
}

void nRF905_SetReceiveMode(void)
{
	CLR_TX_EN();		// 设置为接收模式
 1f4:	d8 98       	cbi	0x1b, 0	; 27
 1f6:	8c ec       	ldi	r24, 0xCC	; 204
 1f8:	9a e0       	ldi	r25, 0x0A	; 10
 1fa:	fc 01       	movw	r30, r24
 1fc:	31 97       	sbiw	r30, 0x01	; 1
 1fe:	f1 f7       	brne	.-4      	; 0x1fc <nRF905_Init+0x18>
	_delay_ms(1);
	SET_TRX_CE();		// 使能接收
 200:	d9 9a       	sbi	0x1b, 1	; 27
 202:	01 97       	sbiw	r24, 0x01	; 1
 204:	f1 f7       	brne	.-4      	; 0x202 <nRF905_Init+0x1e>
 206:	80 e0       	ldi	r24, 0x00	; 0
 208:	90 e0       	ldi	r25, 0x00	; 0
	nRF905_SetReceiveMode(); 			// 设置为接收模式

	/* 发送缓冲区,接收缓冲区清零 */
	for(i = 0; i < BUF_SIZE;i++)
	{
		SendBuffer[i] = 0;
 20a:	fc 01       	movw	r30, r24
 20c:	ee 59       	subi	r30, 0x9E	; 158
 20e:	ff 4f       	sbci	r31, 0xFF	; 255
 210:	10 82       	st	Z, r1
		ReceiveBuffer[i] = 0;
 212:	fc 01       	movw	r30, r24
 214:	ee 57       	subi	r30, 0x7E	; 126
 216:	ff 4f       	sbci	r31, 0xFF	; 255
 218:	10 82       	st	Z, r1
 21a:	01 96       	adiw	r24, 0x01	; 1
	PORT_NRF905 |= ((0<<TX_EN)|(0<<TRX_CE)|(1<<PWR_UP)|(1<<DR)|(1<<AM)|(1<<CD));
	nRF905_SetConfig(nRF_rxaddr);		// 初始化nRF905,并设置接收地址
	nRF905_SetReceiveMode(); 			// 设置为接收模式

	/* 发送缓冲区,接收缓冲区清零 */
	for(i = 0; i < BUF_SIZE;i++)
 21c:	80 32       	cpi	r24, 0x20	; 32
 21e:	91 05       	cpc	r25, r1
 220:	a1 f7       	brne	.-24     	; 0x20a <nRF905_Init+0x26>
	{
		SendBuffer[i] = 0;
		ReceiveBuffer[i] = 0;
	}
}
 222:	08 95       	ret

00000224 <nRF905_ReceivePacket>:
	}
	else SET_TRX_CE();				//设置nRF905为工作方式
}

void nRF905_ReceivePacket(void)
{
 224:	d8 98       	cbi	0x1b, 0	; 27
 226:	8c ec       	ldi	r24, 0xCC	; 204
 228:	9a e0       	ldi	r25, 0x0A	; 10
 22a:	fc 01       	movw	r30, r24
 22c:	31 97       	sbiw	r30, 0x01	; 1
 22e:	f1 f7       	brne	.-4      	; 0x22c <nRF905_ReceivePacket+0x8>

void nRF905_SetReceiveMode(void)
{
	CLR_TX_EN();		// 设置为接收模式
	_delay_ms(1);
	SET_TRX_CE();		// 使能接收
 230:	d9 9a       	sbi	0x1b, 1	; 27
 232:	01 97       	sbiw	r24, 0x01	; 1
 234:	f1 f7       	brne	.-4      	; 0x232 <nRF905_ReceivePacket+0xe>
	// CD=1且AM=0,DR=0
	//if(   ( PIN_NRF905 & (1<<CD) )
	//		&& ((PIND & ((1<<AM)|(1<<DR)) ) == 0) 
	//  )
	{
		CLR_TRX_CE();				// 待机模式
 236:	d9 98       	cbi	0x1b, 1	; 27

⌨️ 快捷键说明

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