Loading...
Searching...
No Matches
nrf24l01p_ng_registers.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2019 Otto-von-Guericke-Universität Magdeburg
3 *
4 * This file is subject to the terms and conditions of the GNU Lesser
5 * General Public License v2.1. See the file LICENSE in the top level
6 * directory for more details.
7 */
8
9#pragma once
10
20
21#include <stdint.h>
22
23#include "nrf24l01p_ng.h"
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
39#define NRF24L01P_NG_REG_CONFIG (0x00)
43#define NRF24L01P_NG_FLG_MASK_RX_DR (0x40)
47#define NRF24L01P_NG_VAL_MASK_RX_DR(reg) (((reg) & \
48 NRF24L01P_NG_FLG_MASK_RX_DR) >> 6)
49
52#define NRF24L01P_NG_FLG_MASK_TX_DS (0x20)
56#define NRF24L01P_NG_VAL_MASK_TX_DS(reg) (((reg) & \
57 NRF24L01P_NG_FLG_MASK_TX_DS) >> 5)
58
61#define NRF24L01P_NG_FLG_MASK_MAX_RT (0x10)
65#define NRF24L01P_NG_VAL_MASK_MAX_RT (((reg) & \
66 NRF24L01P_NG_FLG_MASK_MAX_RT) >> 4)
67
70#define NRF24L01P_NG_FLG_EN_CRC (0x08)
74#define NRF24L01P_NG_VAL_EN_CRC(reg) (((reg) & \
75 NRF24L01P_NG_FLG_EN_CRC) >> 3)
76
79#define NRF24L01P_NG_FLG_CRCO_1_BYTE (0x00)
83#define NRF24L01P_NG_FLG_CRCO_2_BYTE (0x04)
87#define NRF24L01P_NG_MSK_CRC (0x0c)
91#define NRF24L01P_NG_FLG_CRCO(val) (((val) << 2) & \
92 NRF24L01P_NG_MSK_CRC)
93
96#define NRF24L01P_NG_VAL_CRCO(reg) (((reg) & \
97 NRF24L01P_NG_FLG_CRCO_2_BYTE) >> 2)
98
101#define NRF24L01P_NG_FLG_PWR_UP (0x02)
105#define NRF24L01P_NG_VAL_PWR_UP(reg) (((reg) & \
106 NRF24L01P_NG_FLG_PWR_UP) >> 1)
107
110#define NRF24L01P_NG_FLG_PRIM_RX (0x01)
114#define NRF24L01P_NG_VAL_PRIM_RX(reg) ((reg) & NRF24L01P_NG_FLG_PRIM_RX)
116
126#define NRF24L01P_NG_REG_EN_AA (0x01)
130#define NRF24L01P_NG_FLG_ENAA_P5 (0x20)
134#define NRF24L01P_NG_VAL_ENAA_P5(reg) (((reg) & \
135 NRF24L01P_NG_FLG_ENAA_P5) >> 5)
136
139#define NRF24L01P_NG_FLG_ENAA_P4 (0x10)
143#define NRF24L01P_NG_VAL_ENAA_P4(reg) (((reg) & \
144 NRF24L01P_NG_FLG_ENAA_P4) >> 4)
145
148#define NRF24L01P_NG_FLG_ENAA_P3 (0x08)
152#define NRF24L01P_NG_VAL_ENAA_P3(reg) (((reg) & \
153 NRF24L01P_NG_FLG_ENAA_P3) >> 3)
154
157#define NRF24L01P_NG_FLG_ENAA_P2 (0x04)
161#define NRF24L01P_NG_VAL_ENAA_P2(reg) (((reg) & \
162 NRF24L01P_NG_FLG_ENAA_P2) >> 2)
163
166#define NRF24L01P_NG_FLG_ENAA_P1 (0x02)
170#define NRF24L01P_NG_VAL_ENAA_P1(reg) (((reg) & \
171 NRF24L01P_NG_FLG_ENAA_P1) >> 1)
172
175#define NRF24L01P_NG_FLG_ENAA_P0 (0x01)
179#define NRF24L01P_NG_VAL_ENAA_P0(reg) ((reg) & NRF24L01P_NG_FLG_ENAA_P0)
181
191#define NRF24L01P_NG_REG_EN_RXADDR (0x02)
195#define NRF24L01P_NG_FLG_ERX_P5 (0x20)
199#define NRF24L01P_NG_VAL_ERX_P5(reg) (((reg) & \
200 NRF24L01P_NG_FLG_ERX_P5) >> 5)
201
204#define NRF24L01P_NG_FLG_ERX_P4 (0x10)
208#define NRF24L01P_NG_VAL_ERX_P4(reg) (((reg) & \
209 NRF24L01P_NG_FLG_ERX_P4) >> 4)
210
213#define NRF24L01P_NG_FLG_ERX_P3 (0x08)
217#define NRF24L01P_NG_VAL_ERX_P3(reg) (((reg) & \
218 NRF24L01P_NG_FLG_ERX_P3) >> 3)
219
222#define NRF24L01P_NG_FLG_ERX_P2 (0x04)
226#define NRF24L01P_NG_VAL_ERX_P2(reg) (((reg) & \
227 NRF24L01P_NG_FLG_ERX_P2) >> 2)
228
231#define NRF24L01P_NG_FLG_ERX_P1 (0x02)
235#define NRF24L01P_NG_VAL_ERX_P1(reg) (((reg) & \
236 NRF24L01P_NG_FLG_ERX_P1) >> 1)
237
240#define NRF24L01P_NG_FLG_ERX_P0 (0x01)
244#define NRF24L01P_NG_VAL_ERX_P0(reg) ((reg) & NRF24L01P_NG_FLG_ERX_P0)
246
256#define NRF24L01P_NG_REG_SETUP_AW (0x03)
260#define NRF24L01P_NG_FLG_AW_3 (0x01)
264#define NRF24L01P_NG_FLG_AW_4 (0x02)
268#define NRF24L01P_NG_FLG_AW_5 (0x03)
272#define NRF24L01P_NG_MSK_AW (0x03)
276#define NRF24L01P_NG_FLG_AW(val) ((val) & NRF24L01P_NG_MSK_AW)
280#define NRF24L01P_NG_VAL_AW(reg) ((reg) & NRF24L01P_NG_MSK_AW)
282
292#define NRF24L01P_NG_REG_SETUP_RETR (0x04)
296#define NRF24L01P_NG_FLG_ARD_250_US (0x00)
300#define NRF24L01P_NG_FLG_ARD_500_US (0x10)
304#define NRF24L01P_NG_FLG_ARD_750_US (0x20)
308#define NRF24L01P_NG_FLG_ARD_1000_US (0x30)
312#define NRF24L01P_NG_FLG_ARD_1250_US (0x40)
316#define NRF24L01P_NG_FLG_ARD_1500_US (0x50)
320#define NRF24L01P_NG_FLG_ARD_1750_US (0x60)
324#define NRF24L01P_NG_FLG_ARD_2000_US (0x70)
328#define NRF24L01P_NG_FLG_ARD_2250_US (0x80)
332#define NRF24L01P_NG_FLG_ARD_2500_US (0x90)
336#define NRF24L01P_NG_FLG_ARD_2750_US (0xa0)
340#define NRF24L01P_NG_FLG_ARD_3000_US (0xb0)
344#define NRF24L01P_NG_FLG_ARD_3250_US (0xc0)
348#define NRF24L01P_NG_FLG_ARD_3500_US (0xd0)
352#define NRF24L01P_NG_FLG_ARD_3750_US (0xe0)
356#define NRF24L01P_NG_FLG_ARD_4000_US (0xf0)
360#define NRF24L01P_NG_MSK_ARD (0xf0)
364#define NRF24L01P_NG_FLG_ARD(val) (((val) << 4) & \
365 NRF24L01P_NG_MSK_ARD)
366
369#define NRF24L01P_NG_VAL_ARD(reg) (((reg) & \
370 NRF24L01P_NG_MSK_ARD) >> 4)
371
374#define NRF24L01P_NG_MSK_ARC (0x0f)
378#define NRF24L01P_NG_FLG_ARC(val) ((val) & NRF24L01P_NG_MSK_ARC)
382#define NRF24L01P_NG_VAL_ARC(reg) ((reg) & NRF24L01P_NG_MSK_ARC)
384
394#define NRF24L01P_NG_REG_RF_CH (0x05)
398#define NRF24L01P_NG_MSK_RF_CH (0x7f)
402#define NRF24L01P_NG_FLG_RF_CH(val) ((val) & NRF24L01P_NG_MSK_RF_CH)
406#define NRF24L01P_NG_VAL_RF_CH(reg) ((reg) & NRF24L01P_NG_MSK_RF_CH)
408
418#define NRF24L01P_NG_REG_RF_SETUP (0x06)
422#define NRF24L01P_NG_FLG_CONT_WAVE (0x80)
426#define NRF24L01P_NG_VAL_CONT_WAVE(reg) (((reg) & \
427 NRF24L01P_NG_FLG_CONT_WAVE) >> 7)
428
431#define NRF24L01P_NG_FLG_RF_DR_LOW (0x20)
435#define NRF24L01P_NG_VAL_RF_DR_LOW(reg) (((reg) & \
436 NRF24L01P_NG_FLG_RF_DR_LOW) >> 5)
437
440#define NRF24L01P_NG_FLG_PLL_LOCK (0x10)
444#define NRF24L01P_NG_VAL_PLL_LOCK(reg) (((reg) & \
445 NRF24L01P_NG_FLG_PLL_LOCK) >> 4)
446
449#define NRF24L01P_NG_FLG_RF_DR_HIGH (0x08)
453#define NRF24L01P_NG_VAL_RF_DR_HIGH(reg) (((reg) & \
454 NRF24L01P_NG_FLG_RF_DR_HIGH) >> 3)
455
458#define NRF24L01P_NG_FLG_RF_DR_250_KBPS (0x08)
462#define NRF24L01P_NG_FLG_RF_DR_1_MBPS (0x00)
466#define NRF24L01P_NG_FLG_RF_DR_2_MBPS (0x20)
470#define NRF24L01P_NG_MSK_RF_DR (0x28)
474#define NRF24L01P_NG_FLG_RF_DR(val) ((((val) & 1) << 5) | \
475 (((val) & 2) << 2))
476
479#define NRF24L01P_NG_VAL_RF_DR(reg) ((((reg) & \
480 NRF24L01P_NG_FLG_RF_DR_LOW) >> 5) \
481 | \
482 (((reg) & \
483 NRF24L01P_NG_FLG_RF_DR_HIGH) >> 2))
484
487#define NRF24L01P_NG_FLG_RF_PWR_MINUS_18 (0x00)
491#define NRF24L01P_NG_FLG_RF_PWR_MINUS_12 (0x02)
495#define NRF24L01P_NG_FLG_RF_PWR_MINUS_6 (0x04)
499#define NRF24L01P_NG_FLG_RF_PWR_0 (0x06)
503#define NRF24L01P_NG_MSK_RF_PWR (0x06)
507#define NRF24L01P_NG_FLG_RF_PWR(val) (((val) << 1) & \
508 NRF24L01P_NG_MSK_RF_PWR)
509
512#define NRF24L01P_NG_VAL_RF_PWR(reg) (((reg) & \
513 NRF24L01P_NG_MSK_RF_PWR) >> 1)
514
515
525#define NRF24L01P_NG_REG_STATUS (0x07)
529#define NRF24L01P_NG_FLG_RX_DR (0x40)
533#define NRF24L01P_NG_VAL_RX_DR(reg) (((reg) & \
534 NRF24L01P_NG_FLG_RX_DR) >> 6)
535
538#define NRF24L01P_NG_FLG_TX_DS (0x20)
542#define NRF24L01P_NG_VAL_TX_DS(reg) (((reg) & \
543 NRF24L01P_NG_FLG_TX_DS) >> 5)
544
547#define NRF24L01P_NG_FLG_MAX_RT (0x10)
551#define NRF24L01P_NG_VAL_MAX_RT(reg) (((reg) & \
552 NRF24L01P_NG_FLG_MAX_RT) >> 4)
553
557#define NRF24L01P_NG_FLG_RX_P_NO_NONE (0x0e)
561#define NRF24L01P_NG_MSK_RX_P_NO (0x0e)
565#define NRF24L01P_NG_FLG_RX_P_NO(val) (((val) << 1) & \
566 NRF24L01P_NG_MSK_RX_P_NO)
567
570#define NRF24L01P_NG_VAL_RX_P_NO(reg) (((reg) & \
571 NRF24L01P_NG_MSK_RX_P_NO) >> 1)
572
576#define NRF24L01P_NG_FLG_TX_FULL (0x01)
580#define NRF24L01P_NG_VAL_TX_FULL(reg) ((reg) & NRF24L01P_NG_FLG_TX_FULL)
582
592#define NRF24L01P_NG_REG_OBSERVE_TX (0x08)
596#define NRF24L01P_NG_MSK_PLOS_CNT (0xf0)
600#define NRF24L01P_NG_FLG_PLOS_CNT(val) (((val) << 4) & \
601 NRF24L01P_NG_MSK_PLOS_CNT)
602
605#define NRF24L01P_NG_VAL_PLOS_CNT(reg) (((reg) & \
606 NRF24L01P_NG_MSK_PLOS_CNT) >> 4)
607
611#define NRF24L01P_NG_MSK_ARC_CNT (0x0f)
615#define NRF24L01P_NG_FLG_ARC_CNT(val) ((val) & NRF24L01P_NG_MSK_ARC_CNT)
619#define NRF24L01P_NG_VAL_ARC_CNT(reg) ((reg) & NRF24L01P_NG_MSK_ARC_CNT)
621
631#define NRF24L01P_NG_REG_RPD (0x09)
635#define NRF24L01P_NG_FLG_RPD (0x01)
639#define NRF24L01P_NG_VAL_RPD(reg) ((reg) & NRF24L01P_NG_FLG_RPD)
641
651#define NRF24L01P_NG_REG_RX_ADDR_P0 (0x0A)
655#define NRF24L01P_NG_REG_RX_ADDR_P1 (0x0B)
659#define NRF24L01P_NG_REG_RX_ADDR_P2 (0x0C)
663#define NRF24L01P_NG_REG_RX_ADDR_P3 (0x0D)
667#define NRF24L01P_NG_REG_RX_ADDR_P4 (0x0E)
671#define NRF24L01P_NG_REG_RX_ADDR_P5 (0x0F)
675#define NRF24L01P_NG_REG_TX_ADDR (0x10)
677
687#define NRF24L01P_NG_REG_RX_PW_P0 (0x11)
691#define NRF24L01P_NG_REG_RX_PW_P1 (0x12)
695#define NRF24L01P_NG_REG_RX_PW_P2 (0x13)
699#define NRF24L01P_NG_REG_RX_PW_P3 (0x14)
703#define NRF24L01P_NG_REG_RX_PW_P4 (0x15)
707#define NRF24L01P_NG_REG_RX_PW_P5 (0x16)
711#define NRF24L01P_NG_MSK_RX_PW_PX (0x1f)
715#define NRF24L01P_NG_FLG_RX_PW_PX(val) ((val) & NRF24L01P_NG_MSK_RX_PW_PX)
719#define NRF24L01P_NG_VAL_RX_PW_PX(reg) ((reg) & NRF24L01P_NG_MSK_RX_PW_PX)
721
731#define NRF24L01P_NG_REG_FIFO_STATUS (0x17)
735#define NRF24L01P_NG_FLG_TX_REUSE (0x40)
739#define NRF24L01P_NG_VAL_TX_REUSE(reg) (((reg) & \
740 NRF24L01P_NG_FLG_TX_REUSE) >> 6)
741
745#define NRF24L01P_NG_FLG_TX_FULL_ (0x20)
749#define NRF24L01P_NG_VAL_TX_FULL_(reg) (((reg) & \
750 NRF24L01P_NG_FLG_TX_FULL_) >> 5)
751
754#define NRF24L01P_NG_FLG_TX_EMPTY (0x10)
758#define NRF24L01P_NG_VAL_TX_EMPTY(reg) (((reg) & \
759 NRF24L01P_NG_FLG_TX_EMPTY) >> 4)
760
763#define NRF24L01P_NG_FLG_RX_FULL (0x02)
767#define NRF24L01P_NG_VAL_RX_FULL(reg) (((reg) & \
768 NRF24L01P_NG_FLG_RX_FULL) >> 1)
769
772#define NRF24L01P_NG_FLG_RX_EMPTY (0x01)
776#define NRF24L01P_NG_VAL_RX_EMPTY(reg) ((reg) & NRF24L01P_NG_FLG_RX_EMPTY)
778
788#define NRF24L01P_NG_REG_DYNPD (0x1C)
792#define NRF24L01P_NG_FLG_DPL_P5 (0x20)
796#define NRF24L01P_NG_VAL_DPL_P5(reg) (((reg) & \
797 NRF24L01P_NG_FLG_DPL_P5) >> 5)
798
801#define NRF24L01P_NG_FLG_DPL_P4 (0x10)
805#define NRF24L01P_NG_VAL_DPL_P4(reg) (((reg) & \
806 NRF24L01P_NG_FLG_DPL_P4) >> 4)
807
810#define NRF24L01P_NG_FLG_DPL_P3 (0x08)
814#define NRF24L01P_NG_VAL_DPL_P3(reg) (((reg) & \
815 NRF24L01P_NG_FLG_DPL_P3) >> 3)
816
819#define NRF24L01P_NG_FLG_DPL_P2 (0x04)
823#define NRF24L01P_NG_VAL_DPL_P2(reg) (((reg) & \
824 NRF24L01P_NG_FLG_DPL_P2) >> 2)
825
828#define NRF24L01P_NG_FLG_DPL_P1 (0x02)
832#define NRF24L01P_NG_VAL_DPL_P1(reg) (((reg) & \
833 NRF24L01P_NG_FLG_DPL_P1) >> 1)
834
837#define NRF24L01P_NG_FLG_DPL_P0 (0x01)
841#define NRF24L01P_NG_VAL_DPL_P0(reg) ((reg) & NRF24L01P_NG_FLG_DPL_P0)
843
853#define NRF24L01P_NG_REG_FEATURES (0x1D)
857#define NRF24L01P_NG_FLG_EN_DPL (0x04)
861#define NRF24L01P_NG_VAL_EN_DPL(reg) (((reg) & \
862 NRF24L01P_NG_FLG_EN_DPL) >> 2)
863
866#define NRF24L01P_NG_FLG_EN_ACK_PAY (0x02)
870#define NRF24L01P_NG_VAL_EN_ACK_PAY(reg) (((reg) & \
871 NRF24L01P_NG_FLG_EN_ACK_PAY) >> 1)
872
875#define NRF24L01P_NG_FLG_EN_DYN_ACK (0x01)
879#define NRF24L01P_NG_VAL_EN_DYN_ACK(reg) ((reg) & \
880 NRF24L01P_NG_FLG_EN_DYN_ACK)
881
882
891static inline
892uint8_t nrf24l01p_ng_reg8_read(const nrf24l01p_ng_t *dev, uint8_t reg_addr) {
893 uint8_t reg_val;
894 nrf24l01p_ng_read_reg(dev, reg_addr, &reg_val, 1);
895 return reg_val;
896}
897
907static inline
909 uint8_t reg_addr, uint8_t reg_val) {
910 return nrf24l01p_ng_write_reg(dev, reg_addr, &reg_val, 1);
911}
912
922static inline
924 uint8_t reg_addr, uint8_t *reg_val) {
925 uint8_t reg_val_old;
926 nrf24l01p_ng_read_reg(dev, reg_addr, &reg_val_old, sizeof(reg_val_old));
927 *reg_val = reg_val_old | *reg_val;
928 return nrf24l01p_ng_write_reg(dev, reg_addr, reg_val, sizeof(*reg_val));
929}
930
939static inline
941 uint8_t reg_addr, uint8_t *reg_val) {
942 uint8_t reg_val_old;
943 nrf24l01p_ng_read_reg(dev, reg_addr, &reg_val_old, sizeof(reg_val_old));
944 *reg_val = reg_val_old &= ~(*reg_val);
945 return nrf24l01p_ng_write_reg(dev, reg_addr, reg_val, sizeof(*reg_val));
946}
947
958static inline
959uint8_t nrf24l01p_ng_reg8_mod(const nrf24l01p_ng_t *dev, uint8_t reg_addr,
960 uint8_t mask, uint8_t *reg_val) {
961 uint8_t reg_val_old;
962 nrf24l01p_ng_read_reg(dev, reg_addr, &reg_val_old, sizeof(reg_val_old));
963 reg_val_old &= ~mask;
964 *reg_val = reg_val_old | *reg_val;
965 return nrf24l01p_ng_write_reg(dev, reg_addr, reg_val, sizeof(*reg_val));
966}
967
968#ifdef __cplusplus
969}
970#endif
971
Public interface for NRF24L01+ (NG) devices.
Functions to communicate with the NRF24L01+ (NG) transceiver via SPI.
uint8_t nrf24l01p_ng_write_reg(const nrf24l01p_ng_t *dev, uint8_t reg, const uint8_t *src, size_t len)
Write a register value.
uint8_t nrf24l01p_ng_read_reg(const nrf24l01p_ng_t *dev, uint8_t reg, uint8_t *dest, size_t len)
Read a register value.
static uint8_t nrf24l01p_ng_reg8_set(const nrf24l01p_ng_t *dev, uint8_t reg_addr, uint8_t *reg_val)
Set bits in a certain 8-bit register.
static uint8_t nrf24l01p_ng_reg8_read(const nrf24l01p_ng_t *dev, uint8_t reg_addr)
Read the contents of an 8 bit register.
static uint8_t nrf24l01p_ng_reg8_clear(const nrf24l01p_ng_t *dev, uint8_t reg_addr, uint8_t *reg_val)
Clear bits in a certain 8-bit register.
static uint8_t nrf24l01p_ng_reg8_mod(const nrf24l01p_ng_t *dev, uint8_t reg_addr, uint8_t mask, uint8_t *reg_val)
Modify bits in a certain 8-bit register.
static uint8_t nrf24l01p_ng_reg8_write(const nrf24l01p_ng_t *dev, uint8_t reg_addr, uint8_t reg_val)
Write the contents of an 8 bit register.
struct nrf24l01p_ng nrf24l01p_ng_t
typedef of forward declaration