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 + -
显示快捷键?