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