main.lss

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

LSS
1,032
字号
	SET_TRX_CE();					// 使能接收
 248:	d9 9a       	sbi	0x1b, 1	; 27
 24a:	01 97       	sbiw	r24, 0x01	; 1
 24c:	f1 f7       	brne	.-4      	; 0x24a <nRF905_ReceivePacket+0xe>
	// CD=1且AM=0,DR=0
	//if(   ( PIN_NRF905 & (1<<CD) )
	//		&& ((PIND & ((1<<AM)|(1<<DR)) ) == 0) 
	//  )
	{
		CLR_TRX_CE();				// 待机模式
 24e:	d9 98       	cbi	0x1b, 1	; 27
		asm("nop");
 250:	00 00       	nop
		CLR_SS();
 252:	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;
 254:	84 e2       	ldi	r24, 0x24	; 36
 256:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 258:	77 9b       	sbis	0x0e, 7	; 14
 25a:	fe cf       	rjmp	.-4      	; 0x258 <nRF905_ReceivePacket+0x1c>
		;
	return SPDR;
 25c:	8f b1       	in	r24, 0x0f	; 15
 25e:	e2 e9       	ldi	r30, 0x92	; 146
 260:	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;
 262:	9f ef       	ldi	r25, 0xFF	; 255
 264:	9f b9       	out	0x0f, r25	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 266:	77 9b       	sbis	0x0e, 7	; 14
 268:	fe cf       	rjmp	.-4      	; 0x266 <nRF905_ReceivePacket+0x2a>
		;
	return SPDR;
 26a:	8f b1       	in	r24, 0x0f	; 15
		asm("nop");
		CLR_SS();
		SPI_ReadWrite(RRP);
		for(i = 0; i < 32; ++i)
		{
			ReceiveBuffer[i] = SPI_ReadWrite(0xff);
 26c:	81 93       	st	Z+, r24
	{
		CLR_TRX_CE();				// 待机模式
		asm("nop");
		CLR_SS();
		SPI_ReadWrite(RRP);
		for(i = 0; i < 32; ++i)
 26e:	80 e0       	ldi	r24, 0x00	; 0
 270:	e2 3b       	cpi	r30, 0xB2	; 178
 272:	f8 07       	cpc	r31, r24
 274:	b9 f7       	brne	.-18     	; 0x264 <nRF905_ReceivePacket+0x28>
		{
			ReceiveBuffer[i] = SPI_ReadWrite(0xff);
		}
		SET_SS();
 276:	c4 9a       	sbi	0x18, 4	; 24
		while(PIN_NRF905 & ((1<<AM)|(1<<DR)) );		// 等待
 278:	89 b3       	in	r24, 0x19	; 25
 27a:	80 73       	andi	r24, 0x30	; 48
 27c:	e9 f7       	brne	.-6      	; 0x278 <nRF905_ReceivePacket+0x3c>
		ReceiveCount = 32;
 27e:	80 e2       	ldi	r24, 0x20	; 32
 280:	80 93 70 00 	sts	0x0070, r24
		SET_TRX_CE();
 284:	d9 9a       	sbi	0x1b, 1	; 27
//		LED_ON();
	}
}
 286:	08 95       	ret

00000288 <nRF905_SendPacket>:

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

void nRF905_SetSendMode(void)
{
	_delay_ms(1);
	SET_TX_EN();					// 设置为发送模式
 29e:	d8 9a       	sbi	0x1b, 0	; 27
 2a0:	fc 01       	movw	r30, r24
 2a2:	31 97       	sbiw	r30, 0x01	; 1
 2a4:	f1 f7       	brne	.-4      	; 0x2a2 <nRF905_SendPacket+0x1a>
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");*/
	_delay_ms(1);
	CLR_TRX_CE();					// 待机PORTD &= ~(1<<TRX_CE);
 2a6:	d9 98       	cbi	0x1b, 1	; 27
 2a8:	fc 01       	movw	r30, r24
 2aa:	31 97       	sbiw	r30, 0x01	; 1
 2ac:	f1 f7       	brne	.-4      	; 0x2aa <nRF905_SendPacket+0x22>
	if( (PIN_NRF905 & ((1<<CD)|(1<<AM)|(1<<DR))) == 0 )	// 周边无射频信号
	{
		nRF905_SetSendMode();
		//LED_ON();

		asm("nop");
 2ae:	00 00       	nop
		asm("nop");
 2b0:	00 00       	nop
		asm("nop");
 2b2:	00 00       	nop
 2b4:	01 97       	sbiw	r24, 0x01	; 1
 2b6:	f1 f7       	brne	.-4      	; 0x2b4 <nRF905_SendPacket+0x2c>
		_delay_ms(1);
		
		CLR_SS();
 2b8:	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;
 2ba:	82 e2       	ldi	r24, 0x22	; 34
 2bc:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 2be:	77 9b       	sbis	0x0e, 7	; 14
 2c0:	fe cf       	rjmp	.-4      	; 0x2be <nRF905_SendPacket+0x36>
		;
	return SPDR;
 2c2:	8f b1       	in	r24, 0x0f	; 15
		asm("nop");
		_delay_ms(1);
		
		CLR_SS();
		SPI_ReadWrite(WTA);				// 写发送地址
		SPI_ReadWrite((nRF_rxaddr >> 24));  		// 接收有效地址第1字节
 2c4:	85 2f       	mov	r24, r21
 2c6:	99 27       	eor	r25, r25
 2c8:	aa 27       	eor	r26, r26
 2ca:	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;
 2cc:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 2ce:	77 9b       	sbis	0x0e, 7	; 14
 2d0:	fe cf       	rjmp	.-4      	; 0x2ce <nRF905_SendPacket+0x46>
		;
	return SPDR;
 2d2:	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字节
 2d4:	ca 01       	movw	r24, r20
 2d6:	aa 27       	eor	r26, r26
 2d8:	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;
 2da:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 2dc:	77 9b       	sbis	0x0e, 7	; 14
 2de:	fe cf       	rjmp	.-4      	; 0x2dc <nRF905_SendPacket+0x54>
		;
	return SPDR;
 2e0:	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字节
 2e2:	bb 27       	eor	r27, r27
 2e4:	a5 2f       	mov	r26, r21
 2e6:	94 2f       	mov	r25, r20
 2e8:	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;
 2ea:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 2ec:	77 9b       	sbis	0x0e, 7	; 14
 2ee:	fe cf       	rjmp	.-4      	; 0x2ec <nRF905_SendPacket+0x64>
		;
	return SPDR;
 2f0:	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;
 2f2:	2f b9       	out	0x0f, r18	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 2f4:	77 9b       	sbis	0x0e, 7	; 14
 2f6:	fe cf       	rjmp	.-4      	; 0x2f4 <nRF905_SendPacket+0x6c>
		;
	return SPDR;
 2f8:	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();
 2fa:	c4 9a       	sbi	0x18, 4	; 24

		asm("nop");
 2fc:	00 00       	nop
		asm("nop");
 2fe:	00 00       	nop
		asm("nop");
 300:	00 00       	nop

		CLR_SS();
 302:	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;
 304:	80 e2       	ldi	r24, 0x20	; 32
 306:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 308:	77 9b       	sbis	0x0e, 7	; 14
 30a:	fe cf       	rjmp	.-4      	; 0x308 <nRF905_SendPacket+0x80>
		;
	return SPDR;
 30c:	8f b1       	in	r24, 0x0f	; 15
 30e:	e2 e7       	ldi	r30, 0x72	; 114
 310:	f0 e0       	ldi	r31, 0x00	; 0

		CLR_SS();
		SPI_ReadWrite(WTP);
		for( i = 0; i < 32; ++i )
		{
			SPI_ReadWrite(SendBuffer[i]);
 312:	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;
 314:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 316:	77 9b       	sbis	0x0e, 7	; 14
 318:	fe cf       	rjmp	.-4      	; 0x316 <nRF905_SendPacket+0x8e>
		;
	return SPDR;
 31a:	8f b1       	in	r24, 0x0f	; 15
 31c:	31 96       	adiw	r30, 0x01	; 1
		asm("nop");
		asm("nop");

		CLR_SS();
		SPI_ReadWrite(WTP);
		for( i = 0; i < 32; ++i )
 31e:	80 e0       	ldi	r24, 0x00	; 0
 320:	e2 39       	cpi	r30, 0x92	; 146
 322:	f8 07       	cpc	r31, r24
 324:	b1 f7       	brne	.-20     	; 0x312 <nRF905_SendPacket+0x8a>
		{
			SPI_ReadWrite(SendBuffer[i]);
		}
		SET_SS();
 326:	c4 9a       	sbi	0x18, 4	; 24

		SendCount = 32;
 328:	80 e2       	ldi	r24, 0x20	; 32
 32a:	80 93 71 00 	sts	0x0071, r24

}

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

	/*asm("nop");
	asm("nop");
	asm("nop");
	*/
	CLR_TX_EN();					// 设置为接收模式
 33a:	d8 98       	cbi	0x1b, 0	; 27
 33c:	8c ec       	ldi	r24, 0xCC	; 204
 33e:	9a e0       	ldi	r25, 0x0A	; 10
 340:	fc 01       	movw	r30, r24
 342:	31 97       	sbiw	r30, 0x01	; 1
 344:	f1 f7       	brne	.-4      	; 0x342 <nRF905_SendPacket+0xba>
	//asm("nop");
	_delay_ms(1);
	SET_TRX_CE();					// 使能接收
 346:	d9 9a       	sbi	0x1b, 1	; 27
 348:	01 97       	sbiw	r24, 0x01	; 1
 34a:	f1 f7       	brne	.-4      	; 0x348 <nRF905_SendPacket+0xc0>
 34c:	08 95       	ret

0000034e <_exit>:
 34e:	f8 94       	cli

00000350 <__stop_program>:
 350:	ff cf       	rjmp	.-2      	; 0x350 <__stop_program>

⌨️ 快捷键说明

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