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