📄 2.4g+̤
字号:
017E ; /**************************************************/
017E ; unsigned char SPI_RW_Reg(unsigned char reg, unsigned char value)
017E ; {
017E .dbline 300
017E ; unsigned char status;
017E ; nRF24L01_CSNL;
017E 5E98 cbi 0xb,6
0180 .dbline 301
0180 ; delay();
0180 CBDF rcall _delay
0182 .dbline 302
0182 ; status = SPI_RW(reg); // select register
0182 042F mov R16,R20
0184 E1DF rcall _SPI_RW
0186 402F mov R20,R16
0188 .dbline 303
0188 ; SPI_RW(value); // ..and write value to it..
0188 062F mov R16,R22
018A DEDF rcall _SPI_RW
018C .dbline 304
018C ; nRF24L01_CSNH;
018C 5E9A sbi 0xb,6
018E .dbline 305
018E ; delay();
018E C4DF rcall _delay
0190 .dbline 306
0190 ; return(status); // return nRF24L01 status byte
0190 042F mov R16,R20
0192 .dbline -2
0192 L42:
0192 00D0 rcall pop_gset2
0194 .dbline 0 ; func end
0194 0895 ret
0196 .dbsym r status 20 c
0196 .dbsym r value 22 c
0196 .dbsym r reg 20 c
0196 .dbend
0196 .dbfunc e SPI_Read _SPI_Read fc
0196 ; reg_val -> R20
0196 ; reg -> R20
.even
0196 _SPI_Read::
0196 00D0 rcall push_gset1
0198 402F mov R20,R16
019A .dbline -1
019A .dbline 315
019A ; }
019A ; /**************************************************
019A ; Function: SPI_Read();
019A ;
019A ; Description:
019A ; Read one byte from nRF24L01 register, 'reg' */
019A ; /**************************************************/
019A ; unsigned char SPI_Read(unsigned char reg)
019A ; {
019A .dbline 317
019A ; unsigned char reg_val;
019A ; nRF24L01_CSNL;
019A 5E98 cbi 0xb,6
019C .dbline 318
019C ; delay();
019C BDDF rcall _delay
019E .dbline 319
019E ; SPI_RW(reg); // Select register to read from..
019E 042F mov R16,R20
01A0 D3DF rcall _SPI_RW
01A2 .dbline 320
01A2 ; reg_val = SPI_RW(0); // ..then read registervalue
01A2 0027 clr R16
01A4 D1DF rcall _SPI_RW
01A6 402F mov R20,R16
01A8 .dbline 321
01A8 ; nRF24L01_CSNH;
01A8 5E9A sbi 0xb,6
01AA .dbline 322
01AA ; delay();
01AA B6DF rcall _delay
01AC .dbline 323
01AC ; return(reg_val); // return register value
01AC 042F mov R16,R20
01AE .dbline -2
01AE L43:
01AE 00D0 rcall pop_gset1
01B0 .dbline 0 ; func end
01B0 0895 ret
01B2 .dbsym r reg_val 20 c
01B2 .dbsym r reg 20 c
01B2 .dbend
01B2 .dbfunc e SPI_Read_Buf _SPI_Read_Buf fc
01B2 ; status -> R20
01B2 ; byte_ctr -> R22
01B2 ; bytes -> R10
01B2 ; pBuf -> R12,R13
01B2 ; reg -> R20
.even
01B2 _SPI_Read_Buf::
01B2 00D0 rcall push_gset4
01B4 6901 movw R12,R18
01B6 402F mov R20,R16
01B8 A884 ldd R10,y+8
01BA .dbline -1
01BA .dbline 333
01BA ; }
01BA ; /**************************************************
01BA ; Function: SPI_Read_Buf();
01BA ;
01BA ; Description:
01BA ; Reads 'bytes' #of bytes from register 'reg'
01BA ; Typically used to read RX payload, Rx/Tx address */
01BA ; /**************************************************/
01BA ; unsigned char SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)
01BA ; {
01BA .dbline 335
01BA ; unsigned char status,byte_ctr;
01BA ; nRF24L01_CSNL;
01BA 5E98 cbi 0xb,6
01BC .dbline 336
01BC ; delay();
01BC ADDF rcall _delay
01BE .dbline 337
01BE ; status = SPI_RW(reg); // Select register to write to and read status byte
01BE 042F mov R16,R20
01C0 C3DF rcall _SPI_RW
01C2 402F mov R20,R16
01C4 .dbline 338
01C4 ; for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)
01C4 6627 clr R22
01C6 08C0 rjmp L48
01C8 L45:
01C8 .dbline 339
01C8 0027 clr R16
01CA BEDF rcall _SPI_RW
01CC E62F mov R30,R22
01CE FF27 clr R31
01D0 EC0D add R30,R12
01D2 FD1D adc R31,R13
01D4 0083 std z+0,R16
01D6 L46:
01D6 .dbline 338
01D6 6395 inc R22
01D8 L48:
01D8 .dbline 338
01D8 6A15 cp R22,R10
01DA B0F3 brlo L45
01DC .dbline 340
01DC ; pBuf[byte_ctr] = SPI_RW(0); // Perform SPI_RW to read byte from nRF24L01
01DC ; nRF24L01_CSNH;
01DC 5E9A sbi 0xb,6
01DE .dbline 341
01DE ; delay();
01DE 9CDF rcall _delay
01E0 .dbline 342
01E0 ; return(status); // return nRF24L01 status byte
01E0 042F mov R16,R20
01E2 .dbline -2
01E2 L44:
01E2 00D0 rcall pop_gset4
01E4 .dbline 0 ; func end
01E4 0895 ret
01E6 .dbsym r status 20 c
01E6 .dbsym r byte_ctr 22 c
01E6 .dbsym r bytes 10 c
01E6 .dbsym r pBuf 12 pc
01E6 .dbsym r reg 20 c
01E6 .dbend
01E6 .dbfunc e SPI_Write_Buf _SPI_Write_Buf fc
01E6 ; status -> R20
01E6 ; byte_ctr -> R22
01E6 ; bytes -> R10
01E6 ; pBuf -> R12,R13
01E6 ; reg -> R20
.even
01E6 _SPI_Write_Buf::
01E6 00D0 rcall push_gset4
01E8 6901 movw R12,R18
01EA 402F mov R20,R16
01EC A884 ldd R10,y+8
01EE .dbline -1
01EE .dbline 352
01EE ; }
01EE ; /**************************************************
01EE ; Function: SPI_Write_Buf();
01EE ;
01EE ; Description:
01EE ; Writes contents of buffer '*pBuf' to nRF24L01
01EE ; Typically used to write TX payload, Rx/Tx address */
01EE ; /**************************************************/
01EE ; unsigned char SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)
01EE ; {
01EE .dbline 354
01EE ; unsigned char status,byte_ctr;
01EE ; nRF24L01_CSNL; // Set nRF24L01_CSN low, init SPI tranaction
01EE 5E98 cbi 0xb,6
01F0 .dbline 355
01F0 ; delay();
01F0 93DF rcall _delay
01F2 .dbline 356
01F2 ; status = SPI_RW(reg); // Select register to write to and read status byte
01F2 042F mov R16,R20
01F4 A9DF rcall _SPI_RW
01F6 402F mov R20,R16
01F8 .dbline 357
01F8 ; for(byte_ctr=0; byte_ctr<bytes; byte_ctr++) // then write all byte in buffer(*pBuf)
01F8 6627 clr R22
01FA 06C0 rjmp L53
01FC L50:
01FC .dbline 358
01FC F601 movw R30,R12
01FE 0191 ld R16,Z+
0200 6F01 movw R12,R30
0202 A2DF rcall _SPI_RW
0204 402F mov R20,R16
0206 L51:
0206 .dbline 357
0206 6395 inc R22
0208 L53:
0208 .dbline 357
0208 6A15 cp R22,R10
020A C0F3 brlo L50
020C .dbline 359
020C ; status = SPI_RW(*pBuf++);
020C ; nRF24L01_CSNH; // Set nRF24L01_CSN high again
020C 5E9A sbi 0xb,6
020E .dbline 360
020E ; delay();
020E 84DF rcall _delay
0210 .dbline 361
0210 ; return(status); // return nRF24L01 status byte
0210 042F mov R16,R20
0212 .dbline -2
0212 L49:
0212 00D0 rcall pop_gset4
0214 .dbline 0 ; func end
0214 0895 ret
0216 .dbsym r status 20 c
0216 .dbsym r byte_ctr 22 c
0216 .dbsym r bytes 10 c
0216 .dbsym r pBuf 12 pc
0216 .dbsym r reg 20 c
0216 .dbend
0216 .dbfunc e RX_Mode _RX_Mode fV
.even
0216 _RX_Mode::
0216 2197 sbiw R28,1
0218 .dbline -1
0218 .dbline 374
0218 ; }
0218 ; /**************************************************
0218 ; Function: RX_Mode();
0218 ;
0218 ; Description:
0218 ; This function initializes one nRF24L01 device to
0218 ; RX Mode, set RX address, writes RX payload width,
0218 ; select RF channel, datarate & LNA HCURR.
0218 ; After init, CE is toggled high, which means that
0218 ; this device is now ready to receive a datapacket. */
0218 ; /**************************************************/
0218 ; void RX_Mode(void)
0218 ; {
0218 .dbline 375
0218 ; nRF24L01_CEL;
0218 5D98 cbi 0xb,5
021A .dbline 376
021A ; delay();
021A 7EDF rcall _delay
021C .dbline 377
021C ; 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
021C 85E0 ldi R24,5
021E 8883 std y+0,R24
0220 20E0 ldi R18,<_TX_ADDRESS
0222 30E0 ldi R19,>_TX_ADDRESS
0224 0AE2 ldi R16,42
0226 DFDF rcall _SPI_Write_Buf
0228 .dbline 379
0228 ;
0228 ; SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // Enable Auto.Ack:Pipe0
0228 21E0 ldi R18,1
022A 01E2 ldi R16,33
022C A5DF rcall _SPI_RW_Reg
022E .dbline 380
022E ; SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // Enable Pipe0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -