main.lss

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

LSS
1,032
字号

void nRF905_SetReceiveMode(void)
{
 148:	d8 98       	cbi	0x1b, 0	; 27
 14a:	8c ec       	ldi	r24, 0xCC	; 204
 14c:	9a e0       	ldi	r25, 0x0A	; 10
 14e:	fc 01       	movw	r30, r24
 150:	31 97       	sbiw	r30, 0x01	; 1
 152:	f1 f7       	brne	.-4      	; 0x150 <nRF905_SetReceiveMode+0x8>
	asm("nop");
	*/
	CLR_TX_EN();					// 设置为接收模式
	//asm("nop");
	_delay_ms(1);
	SET_TRX_CE();					// 使能接收
 154:	d9 9a       	sbi	0x1b, 1	; 27
 156:	01 97       	sbiw	r24, 0x01	; 1
 158:	f1 f7       	brne	.-4      	; 0x156 <nRF905_SetReceiveMode+0xe>
	asm("nop");
	asm("nop");
	*/
	_delay_ms(1);

}
 15a:	08 95       	ret

0000015c <nRF905_SendStart>:

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

0000016a <nRF905_SetConfig>:

void nRF905_SetConfig(unsigned long nRFAddr)		//配置nRF905
{
 16a:	9b 01       	movw	r18, r22
 16c:	ac 01       	movw	r20, r24
	CLR_TRX_CE();					//设置nRF905为待机方式
 16e:	d9 98       	cbi	0x1b, 1	; 27
	asm("nop");
 170:	00 00       	nop

	CLR_SS();					//打开SPI
 172:	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;
 174:	1f b8       	out	0x0f, r1	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 176:	77 9b       	sbis	0x0e, 7	; 14
 178:	fe cf       	rjmp	.-4      	; 0x176 <nRF905_SetConfig+0xc>
		;
	return SPDR;
 17a:	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;
 17c:	8a e6       	ldi	r24, 0x6A	; 106
 17e:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 180:	77 9b       	sbis	0x0e, 7	; 14
 182:	fe cf       	rjmp	.-4      	; 0x180 <nRF905_SetConfig+0x16>
		;
	return SPDR;
 184:	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;
 186:	8c e0       	ldi	r24, 0x0C	; 12
 188:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 18a:	77 9b       	sbis	0x0e, 7	; 14
 18c:	fe cf       	rjmp	.-4      	; 0x18a <nRF905_SetConfig+0x20>
		;
	return SPDR;
 18e:	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;
 190:	84 e4       	ldi	r24, 0x44	; 68
 192:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 194:	77 9b       	sbis	0x0e, 7	; 14
 196:	fe cf       	rjmp	.-4      	; 0x194 <nRF905_SetConfig+0x2a>
		;
	return SPDR;
 198:	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;
 19a:	80 e2       	ldi	r24, 0x20	; 32
 19c:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 19e:	77 9b       	sbis	0x0e, 7	; 14
 1a0:	fe cf       	rjmp	.-4      	; 0x19e <nRF905_SetConfig+0x34>
		;
	return SPDR;
 1a2:	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;
 1a4:	80 e2       	ldi	r24, 0x20	; 32
 1a6:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 1a8:	77 9b       	sbis	0x0e, 7	; 14
 1aa:	fe cf       	rjmp	.-4      	; 0x1a8 <nRF905_SetConfig+0x3e>
		;
	return SPDR;
 1ac:	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字节
 1ae:	85 2f       	mov	r24, r21
 1b0:	99 27       	eor	r25, r25
 1b2:	aa 27       	eor	r26, r26
 1b4:	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;
 1b6:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 1b8:	77 9b       	sbis	0x0e, 7	; 14
 1ba:	fe cf       	rjmp	.-4      	; 0x1b8 <nRF905_SetConfig+0x4e>
		;
	return SPDR;
 1bc:	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字节
 1be:	ca 01       	movw	r24, r20
 1c0:	aa 27       	eor	r26, r26
 1c2:	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;
 1c4:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 1c6:	77 9b       	sbis	0x0e, 7	; 14
 1c8:	fe cf       	rjmp	.-4      	; 0x1c6 <nRF905_SetConfig+0x5c>
		;
	return SPDR;
 1ca:	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字节
 1cc:	bb 27       	eor	r27, r27
 1ce:	a5 2f       	mov	r26, r21
 1d0:	94 2f       	mov	r25, r20
 1d2:	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;
 1d4:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 1d6:	77 9b       	sbis	0x0e, 7	; 14
 1d8:	fe cf       	rjmp	.-4      	; 0x1d6 <nRF905_SetConfig+0x6c>
		;
	return SPDR;
 1da:	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;
 1dc:	2f b9       	out	0x0f, r18	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 1de:	77 9b       	sbis	0x0e, 7	; 14
 1e0:	fe cf       	rjmp	.-4      	; 0x1de <nRF905_SetConfig+0x74>
		;
	return SPDR;
 1e2:	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;
 1e4:	88 ed       	ldi	r24, 0xD8	; 216
 1e6:	8f b9       	out	0x0f, r24	; 15
	while(!(SPSR & (1<<SPIF) ))			// 等待SPI发送完毕
 1e8:	77 9b       	sbis	0x0e, 7	; 14
 1ea:	fe cf       	rjmp	.-4      	; 0x1e8 <nRF905_SetConfig+0x7e>
		;
	return SPDR;
 1ec:	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
 1ee:	c4 9a       	sbi	0x18, 4	; 24

	if ( PORT_NRF905 & (1 << TX_EN) )		//再回到原来的无线收发模式
 1f0:	d8 9b       	sbis	0x1b, 0	; 27
 1f2:	02 c0       	rjmp	.+4      	; 0x1f8 <nRF905_SetConfig+0x8e>
	{
		CLR_TRX_CE();				//设置nRF905为待机方式
 1f4:	d9 98       	cbi	0x1b, 1	; 27
 1f6:	08 95       	ret
	}
	else
	{
		SET_TRX_CE();				//设置nRF905为工作方式
 1f8:	d9 9a       	sbi	0x1b, 1	; 27
 1fa:	08 95       	ret

000001fc <nRF905_Init>:
		;
	return SPDR;
}

void nRF905_Init(unsigned long nRF_rxaddr)
{
 1fc:	2a b3       	in	r18, 0x1a	; 26
 1fe:	27 60       	ori	r18, 0x07	; 7
 200:	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));
 202:	2b b3       	in	r18, 0x1b	; 27
 204:	2c 63       	ori	r18, 0x3C	; 60
 206:	2b bb       	out	0x1b, r18	; 27

	nRF905_SetConfig(nRF_rxaddr);				// 初始化nRF905,并设置接收地址
 208:	0e 94 b5 00 	call	0x16a	; 0x16a <nRF905_SetConfig>

	/*asm("nop");
	asm("nop");
	asm("nop");
	*/
	CLR_TX_EN();					// 设置为接收模式
 20c:	d8 98       	cbi	0x1b, 0	; 27
 20e:	8c ec       	ldi	r24, 0xCC	; 204
 210:	9a e0       	ldi	r25, 0x0A	; 10
 212:	fc 01       	movw	r30, r24
 214:	31 97       	sbiw	r30, 0x01	; 1
 216:	f1 f7       	brne	.-4      	; 0x214 <nRF905_Init+0x18>
	//asm("nop");
	_delay_ms(1);
	SET_TRX_CE();					// 使能接收
 218:	d9 9a       	sbi	0x1b, 1	; 27
 21a:	01 97       	sbiw	r24, 0x01	; 1
 21c:	f1 f7       	brne	.-4      	; 0x21a <nRF905_Init+0x1e>
 21e:	80 e0       	ldi	r24, 0x00	; 0
 220:	90 e0       	ldi	r25, 0x00	; 0
	nRF905_SetReceiveMode(); 				// 设置为接收模式

	/* 发送缓冲区,接收缓冲区清零 */
	for(i = 0; i < BUF_SIZE; ++i)
	{
		SendBuffer[i] = 0;
 222:	fc 01       	movw	r30, r24
 224:	ee 58       	subi	r30, 0x8E	; 142
 226:	ff 4f       	sbci	r31, 0xFF	; 255
 228:	10 82       	st	Z, r1
		ReceiveBuffer[i] = 0;
 22a:	fc 01       	movw	r30, r24
 22c:	ee 56       	subi	r30, 0x6E	; 110
 22e:	ff 4f       	sbci	r31, 0xFF	; 255
 230:	10 82       	st	Z, r1
 232:	01 96       	adiw	r24, 0x01	; 1

	nRF905_SetConfig(nRF_rxaddr);				// 初始化nRF905,并设置接收地址
	nRF905_SetReceiveMode(); 				// 设置为接收模式

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

0000023c <nRF905_ReceivePacket>:
	}

}

void nRF905_ReceivePacket(void)
{
 23c:	d8 98       	cbi	0x1b, 0	; 27
 23e:	8c ec       	ldi	r24, 0xCC	; 204
 240:	9a e0       	ldi	r25, 0x0A	; 10
 242:	fc 01       	movw	r30, r24
 244:	31 97       	sbiw	r30, 0x01	; 1
 246:	f1 f7       	brne	.-4      	; 0x244 <nRF905_ReceivePacket+0x8>
	asm("nop");
	*/
	CLR_TX_EN();					// 设置为接收模式
	//asm("nop");
	_delay_ms(1);

⌨️ 快捷键说明

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