main.lss
来自「以NRF905芯片为核心的PTR8000模块的AVR驱动.驱动芯片为AVR me」· LSS 代码 · 共 947 行 · 第 1/3 页
LSS
947 行
_delay_ms(1);
}
142: 08 95 ret
00000144 <nRF905_SendStart>:
void nRF905_SendStart(void)
{
144: d9 9a sbi 0x1b, 1 ; 27
146: 80 e0 ldi r24, 0x00 ; 0
148: 9c e6 ldi r25, 0x6C ; 108
14a: 01 97 sbiw r24, 0x01 ; 1
14c: f1 f7 brne .-4 ; 0x14a <nRF905_SendStart+0x6>
SET_TRX_CE(); // 开始发送
_delay_ms(10); // while(DR!=1);
CLR_TRX_CE(); // 待机模式
14e: d9 98 cbi 0x1b, 1 ; 27
}
150: 08 95 ret
00000152 <nRF905_SetConfig>:
void nRF905_SetConfig(unsigned long nRFAddr) //配置nRF905
{
152: 9b 01 movw r18, r22
154: ac 01 movw r20, r24
CLR_TRX_CE(); //设置nRF905为待机方式
156: d9 98 cbi 0x1b, 1 ; 27
asm("nop");
158: 00 00 nop
CLR_SS(); //打开SPI
15a: 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;
15c: 1f b8 out 0x0f, r1 ; 15
while(!(SPSR & (1<<SPIF) )); // 等待SPI发送完毕
15e: 77 9b sbis 0x0e, 7 ; 14
160: fe cf rjmp .-4 ; 0x15e <nRF905_SetConfig+0xc>
return SPDR;
162: 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;
164: 8a e6 ldi r24, 0x6A ; 106
166: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR & (1<<SPIF) )); // 等待SPI发送完毕
168: 77 9b sbis 0x0e, 7 ; 14
16a: fe cf rjmp .-4 ; 0x168 <nRF905_SetConfig+0x16>
return SPDR;
16c: 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;
16e: 8c e0 ldi r24, 0x0C ; 12
170: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR & (1<<SPIF) )); // 等待SPI发送完毕
172: 77 9b sbis 0x0e, 7 ; 14
174: fe cf rjmp .-4 ; 0x172 <nRF905_SetConfig+0x20>
return SPDR;
176: 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;
178: 84 e4 ldi r24, 0x44 ; 68
17a: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR & (1<<SPIF) )); // 等待SPI发送完毕
17c: 77 9b sbis 0x0e, 7 ; 14
17e: fe cf rjmp .-4 ; 0x17c <nRF905_SetConfig+0x2a>
return SPDR;
180: 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;
182: 80 e2 ldi r24, 0x20 ; 32
184: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR & (1<<SPIF) )); // 等待SPI发送完毕
186: 77 9b sbis 0x0e, 7 ; 14
188: fe cf rjmp .-4 ; 0x186 <nRF905_SetConfig+0x34>
return SPDR;
18a: 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;
18c: 80 e2 ldi r24, 0x20 ; 32
18e: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR & (1<<SPIF) )); // 等待SPI发送完毕
190: 77 9b sbis 0x0e, 7 ; 14
192: fe cf rjmp .-4 ; 0x190 <nRF905_SetConfig+0x3e>
return SPDR;
194: 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字节
196: 85 2f mov r24, r21
198: 99 27 eor r25, r25
19a: aa 27 eor r26, r26
19c: 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;
19e: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR & (1<<SPIF) )); // 等待SPI发送完毕
1a0: 77 9b sbis 0x0e, 7 ; 14
1a2: fe cf rjmp .-4 ; 0x1a0 <nRF905_SetConfig+0x4e>
return SPDR;
1a4: 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字节
1a6: ca 01 movw r24, r20
1a8: aa 27 eor r26, r26
1aa: 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;
1ac: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR & (1<<SPIF) )); // 等待SPI发送完毕
1ae: 77 9b sbis 0x0e, 7 ; 14
1b0: fe cf rjmp .-4 ; 0x1ae <nRF905_SetConfig+0x5c>
return SPDR;
1b2: 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字节
1b4: bb 27 eor r27, r27
1b6: a5 2f mov r26, r21
1b8: 94 2f mov r25, r20
1ba: 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;
1bc: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR & (1<<SPIF) )); // 等待SPI发送完毕
1be: 77 9b sbis 0x0e, 7 ; 14
1c0: fe cf rjmp .-4 ; 0x1be <nRF905_SetConfig+0x6c>
return SPDR;
1c2: 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;
1c4: 2f b9 out 0x0f, r18 ; 15
while(!(SPSR & (1<<SPIF) )); // 等待SPI发送完毕
1c6: 77 9b sbis 0x0e, 7 ; 14
1c8: fe cf rjmp .-4 ; 0x1c6 <nRF905_SetConfig+0x74>
return SPDR;
1ca: 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;
1cc: 88 ed ldi r24, 0xD8 ; 216
1ce: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR & (1<<SPIF) )); // 等待SPI发送完毕
1d0: 77 9b sbis 0x0e, 7 ; 14
1d2: fe cf rjmp .-4 ; 0x1d0 <nRF905_SetConfig+0x7e>
return SPDR;
1d4: 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
1d6: c4 9a sbi 0x18, 4 ; 24
if ( PORT_NRF905 & (1 << TX_EN) ) //再回到原来的无线收发模式
1d8: d8 9b sbis 0x1b, 0 ; 27
1da: 02 c0 rjmp .+4 ; 0x1e0 <nRF905_SetConfig+0x8e>
{
CLR_TRX_CE(); //设置nRF905为待机方式
1dc: d9 98 cbi 0x1b, 1 ; 27
1de: 08 95 ret
}
else SET_TRX_CE(); //设置nRF905为工作方式
1e0: d9 9a sbi 0x1b, 1 ; 27
1e2: 08 95 ret
000001e4 <nRF905_Init>:
while(!(SPSR & (1<<SPIF) )); // 等待SPI发送完毕
return SPDR;
}
void nRF905_Init(unsigned long nRF_rxaddr)
{
1e4: 2a b3 in r18, 0x1a ; 26
1e6: 27 60 ori r18, 0x07 ; 7
1e8: 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));
1ea: 2b b3 in r18, 0x1b ; 27
1ec: 2c 63 ori r18, 0x3C ; 60
1ee: 2b bb out 0x1b, r18 ; 27
nRF905_SetConfig(nRF_rxaddr); // 初始化nRF905,并设置接收地址
1f0: 0e 94 a9 00 call 0x152 ; 0x152 <nRF905_SetConfig>
_delay_ms(1);
}
void nRF905_SetReceiveMode(void)
{
CLR_TX_EN(); // 设置为接收模式
1f4: d8 98 cbi 0x1b, 0 ; 27
1f6: 8c ec ldi r24, 0xCC ; 204
1f8: 9a e0 ldi r25, 0x0A ; 10
1fa: fc 01 movw r30, r24
1fc: 31 97 sbiw r30, 0x01 ; 1
1fe: f1 f7 brne .-4 ; 0x1fc <nRF905_Init+0x18>
_delay_ms(1);
SET_TRX_CE(); // 使能接收
200: d9 9a sbi 0x1b, 1 ; 27
202: 01 97 sbiw r24, 0x01 ; 1
204: f1 f7 brne .-4 ; 0x202 <nRF905_Init+0x1e>
206: 80 e0 ldi r24, 0x00 ; 0
208: 90 e0 ldi r25, 0x00 ; 0
nRF905_SetReceiveMode(); // 设置为接收模式
/* 发送缓冲区,接收缓冲区清零 */
for(i = 0; i < BUF_SIZE;i++)
{
SendBuffer[i] = 0;
20a: fc 01 movw r30, r24
20c: ee 59 subi r30, 0x9E ; 158
20e: ff 4f sbci r31, 0xFF ; 255
210: 10 82 st Z, r1
ReceiveBuffer[i] = 0;
212: fc 01 movw r30, r24
214: ee 57 subi r30, 0x7E ; 126
216: ff 4f sbci r31, 0xFF ; 255
218: 10 82 st Z, r1
21a: 01 96 adiw r24, 0x01 ; 1
PORT_NRF905 |= ((0<<TX_EN)|(0<<TRX_CE)|(1<<PWR_UP)|(1<<DR)|(1<<AM)|(1<<CD));
nRF905_SetConfig(nRF_rxaddr); // 初始化nRF905,并设置接收地址
nRF905_SetReceiveMode(); // 设置为接收模式
/* 发送缓冲区,接收缓冲区清零 */
for(i = 0; i < BUF_SIZE;i++)
21c: 80 32 cpi r24, 0x20 ; 32
21e: 91 05 cpc r25, r1
220: a1 f7 brne .-24 ; 0x20a <nRF905_Init+0x26>
{
SendBuffer[i] = 0;
ReceiveBuffer[i] = 0;
}
}
222: 08 95 ret
00000224 <nRF905_ReceivePacket>:
}
else SET_TRX_CE(); //设置nRF905为工作方式
}
void nRF905_ReceivePacket(void)
{
224: d8 98 cbi 0x1b, 0 ; 27
226: 8c ec ldi r24, 0xCC ; 204
228: 9a e0 ldi r25, 0x0A ; 10
22a: fc 01 movw r30, r24
22c: 31 97 sbiw r30, 0x01 ; 1
22e: f1 f7 brne .-4 ; 0x22c <nRF905_ReceivePacket+0x8>
void nRF905_SetReceiveMode(void)
{
CLR_TX_EN(); // 设置为接收模式
_delay_ms(1);
SET_TRX_CE(); // 使能接收
230: d9 9a sbi 0x1b, 1 ; 27
232: 01 97 sbiw r24, 0x01 ; 1
234: f1 f7 brne .-4 ; 0x232 <nRF905_ReceivePacket+0xe>
// CD=1且AM=0,DR=0
//if( ( PIN_NRF905 & (1<<CD) )
// && ((PIND & ((1<<AM)|(1<<DR)) ) == 0)
// )
{
CLR_TRX_CE(); // 待机模式
236: d9 98 cbi 0x1b, 1 ; 27
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?