📄 2.4g+̤
字号:
01C4 ; value -> R22
01C4 ; reg -> R20
.even
01C4 _SPI_RW_Reg::
01C4 00D0 rcall push_gset2
01C6 622F mov R22,R18
01C8 402F mov R20,R16
01CA .dbline -1
01CA .dbline 316
01CA ; }
01CA ; /**************************************************
01CA ; Function: SPI_RW_Reg();
01CA ;
01CA ; Description:
01CA ; Writes value 'value' to register 'reg' */
01CA ; /**************************************************/
01CA ; unsigned char SPI_RW_Reg(unsigned char reg, unsigned char value)
01CA ; {
01CA .dbline 318
01CA ; unsigned char status;
01CA ; nRF24L01_CSNL;
01CA 5E98 cbi 0xb,6
01CC .dbline 319
01CC ; delay();
01CC CBDF rcall _delay
01CE .dbline 320
01CE ; status = SPI_RW(reg); // select register
01CE 042F mov R16,R20
01D0 E1DF rcall _SPI_RW
01D2 402F mov R20,R16
01D4 .dbline 321
01D4 ; SPI_RW(value); // ..and write value to it..
01D4 062F mov R16,R22
01D6 DEDF rcall _SPI_RW
01D8 .dbline 322
01D8 ; nRF24L01_CSNH;
01D8 5E9A sbi 0xb,6
01DA .dbline 323
01DA ; delay();
01DA C4DF rcall _delay
01DC .dbline 324
01DC ; return(status); // return nRF24L01 status byte
01DC 042F mov R16,R20
01DE .dbline -2
01DE L50:
01DE 00D0 rcall pop_gset2
01E0 .dbline 0 ; func end
01E0 0895 ret
01E2 .dbsym r status 20 c
01E2 .dbsym r value 22 c
01E2 .dbsym r reg 20 c
01E2 .dbend
01E2 .dbfunc e SPI_Read _SPI_Read fc
01E2 ; reg_val -> R20
01E2 ; reg -> R20
.even
01E2 _SPI_Read::
01E2 00D0 rcall push_gset1
01E4 402F mov R20,R16
01E6 .dbline -1
01E6 .dbline 333
01E6 ; }
01E6 ; /**************************************************
01E6 ; Function: SPI_Read();
01E6 ;
01E6 ; Description:
01E6 ; Read one byte from nRF24L01 register, 'reg' */
01E6 ; /**************************************************/
01E6 ; unsigned char SPI_Read(unsigned char reg)
01E6 ; {
01E6 .dbline 335
01E6 ; unsigned char reg_val;
01E6 ; nRF24L01_CSNL;
01E6 5E98 cbi 0xb,6
01E8 .dbline 336
01E8 ; delay();
01E8 BDDF rcall _delay
01EA .dbline 337
01EA ; SPI_RW(reg); // Select register to read from..
01EA 042F mov R16,R20
01EC D3DF rcall _SPI_RW
01EE .dbline 338
01EE ; reg_val = SPI_RW(0); // ..then read registervalue
01EE 0027 clr R16
01F0 D1DF rcall _SPI_RW
01F2 402F mov R20,R16
01F4 .dbline 339
01F4 ; nRF24L01_CSNH;
01F4 5E9A sbi 0xb,6
01F6 .dbline 340
01F6 ; delay();
01F6 B6DF rcall _delay
01F8 .dbline 341
01F8 ; return(reg_val); // return register value
01F8 042F mov R16,R20
01FA .dbline -2
01FA L51:
01FA 00D0 rcall pop_gset1
01FC .dbline 0 ; func end
01FC 0895 ret
01FE .dbsym r reg_val 20 c
01FE .dbsym r reg 20 c
01FE .dbend
01FE .dbfunc e SPI_Read_Buf _SPI_Read_Buf fc
01FE ; status -> R20
01FE ; byte_ctr -> R22
01FE ; bytes -> R10
01FE ; pBuf -> R12,R13
01FE ; reg -> R20
.even
01FE _SPI_Read_Buf::
01FE 00D0 rcall push_gset4
0200 6901 movw R12,R18
0202 402F mov R20,R16
0204 A884 ldd R10,y+8
0206 .dbline -1
0206 .dbline 351
0206 ; }
0206 ; /**************************************************
0206 ; Function: SPI_Read_Buf();
0206 ;
0206 ; Description:
0206 ; Reads 'bytes' #of bytes from register 'reg'
0206 ; Typically used to read RX payload, Rx/Tx address */
0206 ; /**************************************************/
0206 ; unsigned char SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)
0206 ; {
0206 .dbline 353
0206 ; unsigned char status,byte_ctr;
0206 ; nRF24L01_CSNL;
0206 5E98 cbi 0xb,6
0208 .dbline 354
0208 ; delay();
0208 ADDF rcall _delay
020A .dbline 355
020A ; status = SPI_RW(reg); // Select register to write to and read status byte
020A 042F mov R16,R20
020C C3DF rcall _SPI_RW
020E 402F mov R20,R16
0210 .dbline 356
0210 ; for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)
0210 6627 clr R22
0212 08C0 rjmp L56
0214 L53:
0214 .dbline 357
0214 0027 clr R16
0216 BEDF rcall _SPI_RW
0218 E62F mov R30,R22
021A FF27 clr R31
021C EC0D add R30,R12
021E FD1D adc R31,R13
0220 0083 std z+0,R16
0222 L54:
0222 .dbline 356
0222 6395 inc R22
0224 L56:
0224 .dbline 356
0224 6A15 cp R22,R10
0226 B0F3 brlo L53
0228 .dbline 358
0228 ; pBuf[byte_ctr] = SPI_RW(0); // Perform SPI_RW to read byte from nRF24L01
0228 ; nRF24L01_CSNH;
0228 5E9A sbi 0xb,6
022A .dbline 359
022A ; delay();
022A 9CDF rcall _delay
022C .dbline 360
022C ; return(status); // return nRF24L01 status byte
022C 042F mov R16,R20
022E .dbline -2
022E L52:
022E 00D0 rcall pop_gset4
0230 .dbline 0 ; func end
0230 0895 ret
0232 .dbsym r status 20 c
0232 .dbsym r byte_ctr 22 c
0232 .dbsym r bytes 10 c
0232 .dbsym r pBuf 12 pc
0232 .dbsym r reg 20 c
0232 .dbend
0232 .dbfunc e SPI_Write_Buf _SPI_Write_Buf fc
0232 ; status -> R20
0232 ; byte_ctr -> R22
0232 ; bytes -> R10
0232 ; pBuf -> R12,R13
0232 ; reg -> R20
.even
0232 _SPI_Write_Buf::
0232 00D0 rcall push_gset4
0234 6901 movw R12,R18
0236 402F mov R20,R16
0238 A884 ldd R10,y+8
023A .dbline -1
023A .dbline 370
023A ; }
023A ; /**************************************************
023A ; Function: SPI_Write_Buf();
023A ;
023A ; Description:
023A ; Writes contents of buffer '*pBuf' to nRF24L01
023A ; Typically used to write TX payload, Rx/Tx address */
023A ; /**************************************************/
023A ; unsigned char SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)
023A ; {
023A .dbline 372
023A ; unsigned char status,byte_ctr;
023A ; nRF24L01_CSNL; // Set nRF24L01_CSN low, init SPI tranaction
023A 5E98 cbi 0xb,6
023C .dbline 373
023C ; delay();
023C 93DF rcall _delay
023E .dbline 374
023E ; status = SPI_RW(reg); // Select register to write to and read status byte
023E 042F mov R16,R20
0240 A9DF rcall _SPI_RW
0242 402F mov R20,R16
0244 .dbline 375
0244 ; for(byte_ctr=0; byte_ctr<bytes; byte_ctr++) // then write all byte in buffer(*pBuf)
0244 6627 clr R22
0246 06C0 rjmp L61
0248 L58:
0248 .dbline 376
0248 F601 movw R30,R12
024A 0191 ld R16,Z+
024C 6F01 movw R12,R30
024E A2DF rcall _SPI_RW
0250 402F mov R20,R16
0252 L59:
0252 .dbline 375
0252 6395 inc R22
0254 L61:
0254 .dbline 375
0254 6A15 cp R22,R10
0256 C0F3 brlo L58
0258 .dbline 377
0258 ; status = SPI_RW(*pBuf++);
0258 ; nRF24L01_CSNH; // Set nRF24L01_CSN high again
0258 5E9A sbi 0xb,6
025A .dbline 378
025A ; delay();
025A 84DF rcall _delay
025C .dbline 379
025C ; return(status); // return nRF24L01 status byte
025C 042F mov R16,R20
025E .dbline -2
025E L57:
025E 00D0 rcall pop_gset4
0260 .dbline 0 ; func end
0260 0895 ret
0262 .dbsym r status 20 c
0262 .dbsym r byte_ctr 22 c
0262 .dbsym r bytes 10 c
0262 .dbsym r pBuf 12 pc
0262 .dbsym r reg 20 c
0262 .dbend
0262 .dbfunc e RX_Mode _RX_Mode fV
.even
0262 _RX_Mode::
0262 2197 sbiw R28,1
0264 .dbline -1
0264 .dbline 392
0264 ; }
0264 ; /**************************************************
0264 ; Function: RX_Mode();
0264 ;
0264 ; Description:
0264 ; This function initializes one nRF24L01 device to
0264 ; RX Mode, set RX address, writes RX payload width,
0264 ; select RF channel, datarate & LNA HCURR.
0264 ; After init, CE is toggled high, which means that
0264 ; this device is now ready to receive a datapacket. */
0264 ; /**************************************************/
0264 ; void RX_Mode(void)
0264 ; {
0264 .dbline 393
0264 ; nRF24L01_CEL;
0264 5D98 cbi 0xb,5
0266 .dbline 394
0266 ; delay();
0266 7EDF rcall _delay
0268 .dbline 395
0268 ; SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // Use the same address on the RX device as the TX device
0268 85E0 ldi R24,5
026A 8883 std y+0,R24
026C 20E0 ldi R18,<_TX_ADDRESS
026E 30E0 ldi R19,>_TX_ADDRESS
0270 0AE2 ldi R16,42
0272 DFDF rcall _SPI_Write_Buf
0274 .dbline 397
0274 ;
0274 ; SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // Enable Auto.Ack:Pipe0
0274 21E0 ldi R18,1
0276 01E2 ldi R16,33
0278 A5DF rcall _SPI_RW_Reg
027A .dbline 398
027A ; SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // Enable Pipe0
027A 21E0 ldi R18,1
027C 02E2 ldi R16,34
027E A2DF rcall _SPI_RW_Reg
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -