main.lss

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

LSS
947
字号
		asm("nop");
 238:	00 00       	nop
		CLR_SS();
 23a:	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;
 23c:	84 e2       	ldi	r24, 0x24	; 36
 23e:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 240:	77 9b       	sbis	0x0e, 7	; 14
 242:	fe cf       	rjmp	.-4      	; 0x240 <nRF905_ReceivePacket+0x1c>
	return SPDR;
 244:	8f b1       	in	r24, 0x0f	; 15
 246:	e2 e8       	ldi	r30, 0x82	; 130
 248:	f0 e0       	ldi	r31, 0x00	; 0
	SPCR   = (1<<SPE)|(1<<MSTR)|(0<<CPOL)|(0<<SPR0);   // 主机模式,fck/16, SPI方式0
}

unsigned char SPI_ReadWrite(unsigned char cData)
{
	SPDR = cData;
 24a:	9f ef       	ldi	r25, 0xFF	; 255
 24c:	9f b9       	out	0x0f, r25	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 24e:	77 9b       	sbis	0x0e, 7	; 14
 250:	fe cf       	rjmp	.-4      	; 0x24e <nRF905_ReceivePacket+0x2a>
	return SPDR;
 252:	8f b1       	in	r24, 0x0f	; 15
		asm("nop");
		CLR_SS();
		SPI_ReadWrite(RRP);
		for(i = 0; i < 32; ++i)
		{
			ReceiveBuffer[i] = SPI_ReadWrite(0xff);
 254:	81 93       	st	Z+, r24
	{
		CLR_TRX_CE();				// 待机模式
		asm("nop");
		CLR_SS();
		SPI_ReadWrite(RRP);
		for(i = 0; i < 32; ++i)
 256:	80 e0       	ldi	r24, 0x00	; 0
 258:	e2 3a       	cpi	r30, 0xA2	; 162
 25a:	f8 07       	cpc	r31, r24
 25c:	b9 f7       	brne	.-18     	; 0x24c <nRF905_ReceivePacket+0x28>
		{
			ReceiveBuffer[i] = SPI_ReadWrite(0xff);
		}
		SET_SS();
 25e:	c4 9a       	sbi	0x18, 4	; 24
		while(PIN_NRF905 & ((1<<AM)|(1<<DR)) );		// 等待
 260:	89 b3       	in	r24, 0x19	; 25
 262:	80 73       	andi	r24, 0x30	; 48
 264:	e9 f7       	brne	.-6      	; 0x260 <nRF905_ReceivePacket+0x3c>
		ReceiveCount = 32;
 266:	80 e2       	ldi	r24, 0x20	; 32
 268:	80 93 60 00 	sts	0x0060, r24
		SET_TRX_CE();
 26c:	d9 9a       	sbi	0x1b, 1	; 27
//		LED_ON();
	}
}
 26e:	08 95       	ret

00000270 <nRF905_SendPacket>:

/* 参数为接收端的地址,即:发送给谁? */
void nRF905_SendPacket(unsigned long nRF_rxaddr)
{
 270:	9b 01       	movw	r18, r22
 272:	ac 01       	movw	r20, r24
	unsigned char i;
	if( (PIN_NRF905 & ((1<<CD)|(1<<AM)|(1<<DR))) == 0 )	// 周边无射频信号
 274:	89 b3       	in	r24, 0x19	; 25
 276:	88 73       	andi	r24, 0x38	; 56
 278:	09 f0       	breq	.+2      	; 0x27c <nRF905_SendPacket+0xc>
 27a:	5c c0       	rjmp	.+184    	; 0x334 <nRF905_SendPacket+0xc4>
 27c:	8c ec       	ldi	r24, 0xCC	; 204
 27e:	9a e0       	ldi	r25, 0x0A	; 10
 280:	fc 01       	movw	r30, r24
 282:	31 97       	sbiw	r30, 0x01	; 1
 284:	f1 f7       	brne	.-4      	; 0x282 <nRF905_SendPacket+0x12>
}

void nRF905_SetSendMode(void)
{
	_delay_ms(1);
	SET_TX_EN();		// 设置为发送模式
 286:	d8 9a       	sbi	0x1b, 0	; 27
 288:	fc 01       	movw	r30, r24
 28a:	31 97       	sbiw	r30, 0x01	; 1
 28c:	f1 f7       	brne	.-4      	; 0x28a <nRF905_SendPacket+0x1a>
	_delay_ms(1);
	CLR_TRX_CE();		// 待机PORTD &= ~(1<<TRX_CE);
 28e:	d9 98       	cbi	0x1b, 1	; 27
 290:	fc 01       	movw	r30, r24
 292:	31 97       	sbiw	r30, 0x01	; 1
 294:	f1 f7       	brne	.-4      	; 0x292 <nRF905_SendPacket+0x22>
	if( (PIN_NRF905 & ((1<<CD)|(1<<AM)|(1<<DR))) == 0 )	// 周边无射频信号
	{
		nRF905_SetSendMode();
		//LED_ON();

		asm("nop");
 296:	00 00       	nop
		asm("nop");
 298:	00 00       	nop
		asm("nop");
 29a:	00 00       	nop
 29c:	01 97       	sbiw	r24, 0x01	; 1
 29e:	f1 f7       	brne	.-4      	; 0x29c <nRF905_SendPacket+0x2c>
		_delay_ms(1);
		
		CLR_SS();
 2a0:	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;
 2a2:	82 e2       	ldi	r24, 0x22	; 34
 2a4:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 2a6:	77 9b       	sbis	0x0e, 7	; 14
 2a8:	fe cf       	rjmp	.-4      	; 0x2a6 <nRF905_SendPacket+0x36>
	return SPDR;
 2aa:	8f b1       	in	r24, 0x0f	; 15
		asm("nop");
		_delay_ms(1);
		
		CLR_SS();
		SPI_ReadWrite(WTA);				// 写发送地址
		SPI_ReadWrite((nRF_rxaddr >> 24));  		// 接收有效地址第1字节
 2ac:	85 2f       	mov	r24, r21
 2ae:	99 27       	eor	r25, r25
 2b0:	aa 27       	eor	r26, r26
 2b2:	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;
 2b4:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 2b6:	77 9b       	sbis	0x0e, 7	; 14
 2b8:	fe cf       	rjmp	.-4      	; 0x2b6 <nRF905_SendPacket+0x46>
	return SPDR;
 2ba:	8f b1       	in	r24, 0x0f	; 15
		_delay_ms(1);
		
		CLR_SS();
		SPI_ReadWrite(WTA);				// 写发送地址
		SPI_ReadWrite((nRF_rxaddr >> 24));  		// 接收有效地址第1字节
		SPI_ReadWrite((nRF_rxaddr >> 16) & 0xff);           // 接收有效地址第2字节
 2bc:	ca 01       	movw	r24, r20
 2be:	aa 27       	eor	r26, r26
 2c0:	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;
 2c2:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 2c4:	77 9b       	sbis	0x0e, 7	; 14
 2c6:	fe cf       	rjmp	.-4      	; 0x2c4 <nRF905_SendPacket+0x54>
	return SPDR;
 2c8:	8f b1       	in	r24, 0x0f	; 15
		
		CLR_SS();
		SPI_ReadWrite(WTA);				// 写发送地址
		SPI_ReadWrite((nRF_rxaddr >> 24));  		// 接收有效地址第1字节
		SPI_ReadWrite((nRF_rxaddr >> 16) & 0xff);           // 接收有效地址第2字节
		SPI_ReadWrite((nRF_rxaddr >> 8) & 0xff);            // 接收有效地址第3字节
 2ca:	bb 27       	eor	r27, r27
 2cc:	a5 2f       	mov	r26, r21
 2ce:	94 2f       	mov	r25, r20
 2d0:	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;
 2d2:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 2d4:	77 9b       	sbis	0x0e, 7	; 14
 2d6:	fe cf       	rjmp	.-4      	; 0x2d4 <nRF905_SendPacket+0x64>
	return SPDR;
 2d8:	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;
 2da:	2f b9       	out	0x0f, r18	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 2dc:	77 9b       	sbis	0x0e, 7	; 14
 2de:	fe cf       	rjmp	.-4      	; 0x2dc <nRF905_SendPacket+0x6c>
	return SPDR;
 2e0:	8f b1       	in	r24, 0x0f	; 15
		SPI_ReadWrite(WTA);				// 写发送地址
		SPI_ReadWrite((nRF_rxaddr >> 24));  		// 接收有效地址第1字节
		SPI_ReadWrite((nRF_rxaddr >> 16) & 0xff);           // 接收有效地址第2字节
		SPI_ReadWrite((nRF_rxaddr >> 8) & 0xff);            // 接收有效地址第3字节
		SPI_ReadWrite(nRF_rxaddr & 0xff);                   // 接收有效地址第4字节  
		SET_SS();
 2e2:	c4 9a       	sbi	0x18, 4	; 24

		asm("nop");
 2e4:	00 00       	nop
		asm("nop");
 2e6:	00 00       	nop
		asm("nop");
 2e8:	00 00       	nop

		CLR_SS();
 2ea:	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;
 2ec:	80 e2       	ldi	r24, 0x20	; 32
 2ee:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 2f0:	77 9b       	sbis	0x0e, 7	; 14
 2f2:	fe cf       	rjmp	.-4      	; 0x2f0 <nRF905_SendPacket+0x80>
	return SPDR;
 2f4:	8f b1       	in	r24, 0x0f	; 15
 2f6:	e2 e6       	ldi	r30, 0x62	; 98
 2f8:	f0 e0       	ldi	r31, 0x00	; 0
		asm("nop");
		asm("nop");

		CLR_SS();
		SPI_ReadWrite(WTP);
		for( i = 0; i < 32; i++ )SPI_ReadWrite(SendBuffer[i]);
 2fa:	80 81       	ld	r24, Z
	SPCR   = (1<<SPE)|(1<<MSTR)|(0<<CPOL)|(0<<SPR0);   // 主机模式,fck/16, SPI方式0
}

unsigned char SPI_ReadWrite(unsigned char cData)
{
	SPDR = cData;
 2fc:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ));		// 等待SPI发送完毕
 2fe:	77 9b       	sbis	0x0e, 7	; 14
 300:	fe cf       	rjmp	.-4      	; 0x2fe <nRF905_SendPacket+0x8e>
	return SPDR;
 302:	8f b1       	in	r24, 0x0f	; 15
 304:	31 96       	adiw	r30, 0x01	; 1
		asm("nop");
		asm("nop");

		CLR_SS();
		SPI_ReadWrite(WTP);
		for( i = 0; i < 32; i++ )SPI_ReadWrite(SendBuffer[i]);
 306:	80 e0       	ldi	r24, 0x00	; 0
 308:	e2 38       	cpi	r30, 0x82	; 130
 30a:	f8 07       	cpc	r31, r24
 30c:	b1 f7       	brne	.-20     	; 0x2fa <nRF905_SendPacket+0x8a>
		SET_SS();
 30e:	c4 9a       	sbi	0x18, 4	; 24
		SendCount = 32;
 310:	80 e2       	ldi	r24, 0x20	; 32
 312:	80 93 61 00 	sts	0x0061, r24
	_delay_ms(1);
}

void nRF905_SendStart(void)
{
	SET_TRX_CE();		// 开始发送
 316:	d9 9a       	sbi	0x1b, 1	; 27
 318:	80 e0       	ldi	r24, 0x00	; 0
 31a:	9c e6       	ldi	r25, 0x6C	; 108
 31c:	01 97       	sbiw	r24, 0x01	; 1
 31e:	f1 f7       	brne	.-4      	; 0x31c <nRF905_SendPacket+0xac>
	_delay_ms(10);		// while(DR!=1);
	CLR_TRX_CE();		// 待机模式
 320:	d9 98       	cbi	0x1b, 1	; 27
	_delay_ms(1);
}

void nRF905_SetReceiveMode(void)
{
	CLR_TX_EN();		// 设置为接收模式
 322:	d8 98       	cbi	0x1b, 0	; 27
 324:	8c ec       	ldi	r24, 0xCC	; 204
 326:	9a e0       	ldi	r25, 0x0A	; 10
 328:	fc 01       	movw	r30, r24
 32a:	31 97       	sbiw	r30, 0x01	; 1
 32c:	f1 f7       	brne	.-4      	; 0x32a <nRF905_SendPacket+0xba>
	_delay_ms(1);
	SET_TRX_CE();		// 使能接收
 32e:	d9 9a       	sbi	0x1b, 1	; 27
 330:	01 97       	sbiw	r24, 0x01	; 1
 332:	f1 f7       	brne	.-4      	; 0x330 <nRF905_SendPacket+0xc0>
 334:	08 95       	ret

00000336 <_exit>:
 336:	f8 94       	cli

00000338 <__stop_program>:
 338:	ff cf       	rjmp	.-2      	; 0x338 <__stop_program>

⌨️ 快捷键说明

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